被圍繞的區域

2021-07-09 14:41:02 字數 1761 閱讀 9320

被圍繞的區域

給乙個二維的矩陣,包含'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 ...