題意:給乙個二維的矩陣,包含 『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
解題思路 1 :
用bfs確定連通區域。 對二維矩陣邊緣的』o』進行bfs把其相鄰的』o』連線為乙個區域 , 並對這些區域做標記,例如記為『』,最後遍歷整個二維矩陣,把連通域『『重新記為』o』 ,其他視為』x』 。
class solution
for(int j = 0 ; j < n ; j ++)
for(int i = 0 ; i < m ; i ++)}}
private:
int dx[4] = ;
int dy[4] = ;
bool isinboard(int m , int n , int x , int y)
void bfs(vector
> &board , int x , int y) // 注意對board進行傳引用,不然形參board的修改無法傳到實參中}}
};
解題思路2 :
用並查集確定連通區域。 把與二維矩陣邊緣的』o』相鄰的』o』合併為乙個集合。需要設定乙個集合,然後把所有的元素都扔進去。
#include
#include "algorithm"
using
namespace
std ;
class unionfind
}int find(int p)
return p ;
}void union(int p , int q)
bool connected (int p , int q)
int count ()
private:
int *id , count ;
};class solution}}
bool isedge (int n , int m , int x , int y)
bool isinboard(int n , int m , int x , int y)
void surroundedregions(vector
> &board)}}
}}
}for(int i = 0 ; i < n ; i ++)}}
}void output()
cout
<< endl ;}}
private:
int dx[4] = ;
int dy[4] = ;
};int main()
, ,,};
solution s ;
s.surroundedregions(board) ;
int m = board.size() ;
int n = board[0].size() ;
for(int i = 0 ; i < m ; i ++)
cout << endl ;
}*/solution s(4) ;
s.surroundedregions(s.board) ;
s.output() ;
return
0;}
lintcode 477 被圍繞的區域
給乙個二維的矩陣,包含 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 標籤union find 寬度優先搜尋...
兩次過 Lintcode 477 被圍繞的區域
給乙個二維的矩陣,包含 x 和 o 找到所有被 x 圍繞的區域,並用 x 替換其中所有的 o 樣例 1 輸入 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樣例 2 輸入 x x x x x o o x x o o...
477 被圍繞的區域
中文english 給乙個二維的矩陣,包含 x 和 o 找到所有被 x 圍繞的區域,並用 x 替換其中所有的 o 樣例 1 輸入 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樣例 2 輸入 x x x x x o...