連通塊 島問題 總結

2021-09-29 23:14:49 字數 754 閱讀 6205

給出乙個mxn 的矩陣,矩陣中的元素為0或1。稱位置(x,y)與其上下左右四個位置(x,y+1)、(x,y-1)、(x+1,y)、(x-1,y)是相鄰的。如果矩陣中有若干個1是相鄰的(不必兩兩相鄰),那麼稱這些1構成了乙個「塊」。求給定的矩陣中「塊」的個數。

0 1 1 1 0 0 1

0 0 1 0 0 0 0

0 0 0 0 1 0 0

0 0 0 1 1 1 0

1 1 1 0 1 0 0

1 1 1 1 0 0 0

例如上面的6×7的矩陣中,「塊」的個數為4。

使用dfs和bfs遍歷都行,先找到乙個1,然後對其上下左右四個位置進行判斷是不是1,同時將遍歷過的位置進行標記,防止重複遍歷

這裡以二維陣列講解,其實n維陣列和二維陣列問題解法一樣

注意:

使用bfs解題時,注意其標記已遍歷的位置

使用dfs解題時,有個記憶體溢位的缺陷,特別是2維陣列以上,這時候應該選擇bfs求解

void dfs(int i, int j)

void bfs(int i, int j)

,,, };//方向

while (!q.empty())

} }}

int main(), ,

, ,, ,

}; for (int i = 0; i < v.size(); ++i)

}} cout << cnt;

}

dfs的連通塊問題

01迷宮 連通塊 在搜尋的過程中,從開始的塊開始,它能走過的塊是連在一起的,即它們能夠走的最大距離是是相同的。所以在搜尋的過程中,我們要把走過的先連在一起,用個陣列儲存走過的每一塊,然後在搜尋的最後,對在陣列的每一塊賦值。include include using namespace std int...

搜尋dfs連通塊問題1

hdu1241oil deposits 題目鏈結 題目意思簡單就是求有油廠,油廠是由油點組成,水平,垂直,對角都可以連在一起的,求有多少個這樣的油廠 一樣的 dfs簡單的基礎題 做題的時候出了一點問題就是在輸入的時候用的 c輸入,把ab搞反了。b對應x,a對應y 其實這類題目可以用 s輸入還好些 就...

對比DFS BFS求連通塊問題

許多連通塊問題既可以用bfs求解也可以用dfs求解,兩者各有優缺點。bfs求解 可以求出最短路或者判斷兩者是否連通,不存在爆棧的風險,但空間相對用的多一些而且 相對來說繁瑣一些。dfs求解 dfs 簡潔,相對好寫一些,但存在爆棧的風險,而且不能求出最短路。acwing 1112.迷宮 一天exten...