問題:你有乙個用於表示一片土地的整形矩陣land,該矩陣中每個點的值代表對應地點的海拔高度。若值為0則表示水域。
由垂直、水平或對角線相連的水域為池塘。池塘的大小是指相連線的水域的個數。編寫乙個方法來計算矩陣中所有
池塘的大小,返回值需要從小到大排序。
示例:
輸入:[ [
0, 2, 1, 0
],
[0,
1, 0, 1
], [
1, 1, 0, 1
], [
0, 1, 0, 1]]
輸出: [
1, 2, 4]
(隱藏提示1:如果給你乙個指代水的單元格的行和列,你如何找到所有相鄰的水域?)
(隱藏提示2:嘗試使用遞迴計算含水單元格的數量)
(隱藏提示3:你如何確保不會再一次訪問相同的單元格?你可以思考一下深度優先搜尋如何在圖上工作)
用c++解決如上問題:
classsolution}}
sort(res.begin(), res.end());
//對容器中已計數的count進行大小排序
return
res;
}void dfs(int x, int y, vectorint>> &land, int
count)
, dy[8] = ; //
以原點為基準的8個方向陣列
for(int i = 0; i < 8; i++)
}};
演算法練習 水域大小 深度優先
題目 你有乙個用於表示一片土地的整數矩陣land,該矩陣中每個點的值代表對應地點的海拔高度。若值為0則表示水域。由垂直 水平或對角連線的水域為池塘。池塘的大小是指相連線的水域的個數。編寫乙個方法來計算矩陣中所有池塘的大小,返回值需要從小到大排序。示例 輸入 0,2,1,0 0,1,0,1 1,1,0...
水域大小(DFS)(BFS)
dfs bfs例題 你有乙個用於表示一片土地的整數矩陣land,該矩陣中每個點的值代表對應地點的海拔高度。若值為0則表示水域。由垂直 水平或對角連線的水域為池塘。池塘的大小是指相連線的水域的個數。編寫乙個方法來計算矩陣中所有池塘的大小,返回值需要從小到大排序。示例 0 len land 1000 0...
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...