一、題目
有乙個大小為n*m的園子,雨後積起了水。八連通的計稅被認為是連線在一起的。請求出園子裡總共有多少水窪?
(八連通指的是下圖中相對w的*的部分)
二、輸入與輸出
輸入園子的積水矩陣圖,w表示積水,.表示沒有積水
輸出水窪個數,為3
如圖三個水窪為紅色圈起的部分:
三、演算法分析與實現
實現思路:首先需要明白構成同乙個水窪的條件,即如果能夠成同乙個水窪,那麼該區域中的所有積水點是連通的(八連通),因此為了尋找園子中的積水連通區域,我們需要在整個園子中進行搜尋。
為了能夠全面搜尋,我們遍歷整個園子,每遇到乙個積水點,則就從該積水點開始搜尋出所有與之連通的積水點,為了能夠全面搜尋,我們採用深度優先搜尋,並將經過的積水點進行標記(這裡我們標記成』.』),避免出現環路。
public
class
algorithmcenter200714,,
,,,,
,,,}
;private
int h =
> a.
getlength(0
);//10
private
int w =
> a.
getlength(1
);//12
///
/// 計算水窪個數
///
///
///
public
intcaluatepuddlecount()
}}return count;
}private
void
dfs(
int x,
int y)}}
}
深度優先搜尋 廣度優先搜尋(解決小哈)
問題省略 思路 讓小哼往右邊走,直到走不通的時候再回到這裡,再去嘗試另乙個方向。規定乙個順序,按順時針方向來嘗試 即按照右 下 左 上的順序去嘗試 先 檢查小哼是否已經到達小哈的位置,如果沒有到達則找出下一步可以走的地方。為了解決這個問題,此處dfs 函式只需要維護3個引數,分別是x座標 y座標 以...
深度優先搜尋解決全排列問題
題目 假如有編號為1 2 3的3張撲克牌和編號為1 2 3的3個盒子。現在需要將這3張撲克牌分別放到3個盒子裡,並且每個盒子有且只能放一張撲克牌。那麼一共有多少種不同的排法?及注釋 include 全域性變數,陣列元素值自動初始化為0 int a 10 充當盒子編號 int book 10 用boo...
深度優先搜尋解決八皇后問題
八皇后問題是什麼 八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林的象棋雜誌...