模板題目:DFS (130. Surrounded Regions)
Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’.
不太好直觀理解 見下面的例子:
Example:
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
也就是說將所有被X包圍的O 都變成X 但是如果O存在於邊界 就不算是被包圍。
refer:
Java DFS + boundary cell turning solution, simple and clean code, commented.
class Solution {
public void solve(char[][] board) {
if(board == null || board.length == 0 || board[0] == null || board[0].length == 0) return;
int m = board.length - 1;
int n = board[0].length - 1;
//首先我們把邊上的O(以及其所連線的所有的O)全部改成1
for(int i = 0; i<=m; i++){
if(board[i][0] == 'O'){
dfs(board, i, 0);
}
if(board[i][n] == 'O'){
dfs(board, i, n);
}
}
for(int i = 0; i<=n; i++){
if(board[0][i] == 'O'){
dfs(board, 0, i);
}
if(board[m][i] == 'O'){
dfs(board, m, i);
}
}
//然後再對全域性進行遍歷 將所有的O變成X就行了 因為這個時候所有的鄰接邊界的O都變成1了 然後我們把所有的1都變O就行了
for(int i = 0; i<=m; i++){
for(int j = 0; j<=n; j++){
if(board[i][j] == 'O'){
board[i][j] = 'X';
}
if(board[i][j] == '1'){
board[i][j] = 'O';
}
}
}
}
public void dfs(char[][] board, int i, int j){
if(i<0 || j<0 || i>= board.length || j>= board[0].length || board[i][j] != 'O'){ //之前一直沒通過是因為這兒
return;
}
board[i][j] = '1';
dfs(board, i, j-1);
dfs(board, i, j+1);
dfs(board, i-1, j);
dfs(board, i+1, j);
}
}
相關文章
- 【題目整理】dfs入門
- dfs題目這樣去接題,秒殺leetcode題目LeetCode
- DFS序例題+感受
- dfs的return時機問題
- 數獨問題(DFS+回溯)
- HDU - 2553 N皇后問題(DFS)
- 易優的前端模板模板是在哪個目錄?前端
- 130. 被圍繞的區域
- 130.如何避免注意力分散
- POJ1321棋盤問題(DFS)
- pbootcms模板指定欄目標籤呼叫boot
- DFS
- 題目
- BZOJ3351: [ioi2009]Regions(根號分治)
- dfs序
- DFS樹
- dfs技巧
- ModStart模板主題
- 部落格園美化包括模板、目錄、頂部、進度條滑鼠特效、標題等特效
- 劃分樹模板+模板題--hdu4251
- 決策樹減支問題(優化)dfs減支問題優化
- DedeCMS模板目錄的檔案目錄結構
- pbootcms模板內頁呼叫子欄目,如果沒有子欄目則呼叫同級欄目boot
- pta題目集6和題目集7題後總結
- python刷題常用模板Python
- 深搜dfs
- Tempter of the Bone(DFS)
- 題目分享H 二代目
- 2024夢熊BeiJing集訓題目題解目錄
- 易優CMS模板目錄各檔案說明
- Acwing166 數獨題解 - DFS剪枝最佳化
- leetcode刷題記錄:演算法(六)BFS&DFSLeetCode演算法
- DFS 深搜專題 入門典例 -- 凌宸1642
- n皇后問題--回溯法,以DFS的方式搜尋
- 題目整理01
- 題解目錄
- 最大流題目
- 陣列 題目陣列