LintCode 477 被圍繞的區域

2021-08-10 08:56:41 字數 1768 閱讀 3550

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