被圍繞的區域
給乙個二維的矩陣,包含'x'
和'o'
, 找到所有被 'x' 圍繞的區域,並用 'x' 填充滿。
樣例給出二維矩陣:
x x x x
x o o x
x x o x
x o x x
把被 'x' 圍繞的區域填充之後變為:
x x x x
x x x x
x x x x
x o x x
class unionfind}}
int find(int id)
return parent;
}int compress_find(int id)
int fa = id;
while(fa != father[fa])
return parent;
}void union_both(int a, int b)
}};class solution
// bfs
void fillboarder(vector>& board, char patten, char c)
if(board[i][m-1] == patten)
}for(int j = 1; j < m-1; j++)
if(board[n-1][j] == patten)
}int dx[4] = ;
int dy[4] = ;
while(!q.empty())}}
}void replace(vector>& board, char patten, char c)}}
}// v2 類似於v1, but use dfs
void surroundedregions(vector>& board)
// dfs
void fillboarderdfs(vector>& board, char patten, char c)
for(int j = 1; j < m-1; j++)
}void filldfs(vector>& board, int x, int y, char patten, char c)
board[x][y] = c;
int n = board.size();
int m = board[0].size();
// set those boarder pattern with c
int dx[4] = ;
int dy[4] = ;
for(int k = 0; k < 4; k++)}}
///// v3 : uinon find
void surroundedregions3(vector>& board) ;
int dy[4] = ;
for(int k = 0; k < 4; k++)}}
}// 將邊角以及與其相鄰的『o』 的father 加入set
unordered_setset;
for(int i = 0; i < n; i++)
if(board[i][m-1] == 'o')
}for(int j = 1; j < m-1; j++)
if(board[n-1][j] == 'o')
}// 判斷是否和邊角的『o』同乙個group
for(int i = 0; i < n; i++)}}
}};
被圍繞的區域
給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x解釋 被圍繞的區間不會存在於...
被圍繞的區域
給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間不會存...
被圍繞的區域
給定乙個二維的矩陣,包含x和o。找到所有被x圍繞的區域,並將這些區域裡所有的o用x填充。被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的o都不會被填充為x。任何不在邊界上,或不與邊界上的o相連的o最終都會被填充為x。如果兩個元素在水平或垂直方向相鄰,則稱它們是相連的。x x x x x o o ...