深度優先及廣度優先演算法

2021-10-07 06:55:33 字數 923 閱讀 9926

深度優先搜尋演算法dfs

廣度優先搜尋演算法bfs

在豬呢個演算法知識點中佔比非常大,應用最多的地方是對圖進行遍歷(樹以為是圖的一種)

深度優先搜尋演算法dfs

dfs解決的 是連通性的問題,及給定兩個起始點(或某種起始狀態)和乙個終點(某種最終狀態),判斷是否有一條路徑能從起點連線到終點。

很多情況下,聯通的路徑很多條,只需要找出一條即可,dfs只關心路徑存在與否,不在乎其長短。

演算法的思想:從起點出發,選擇乙個可選方向不斷向前,直到無法繼續為止。

然後嘗試另外一種方向,直到最後走到終點。

boolean dfs(int maze,int x,int y)

maze[x][y] == -1; //標記當前已經被訪問過的點(一般標記是否被訪問過,直接修改訪問過的資料,利用乙個額外的資料結構來記錄)

for(int d =0;d<4;d++) 在規定的4個方向上進行嘗試

}return false; 嘗試了所有可能還沒找到b,則返回false

}

dfs遞迴實現

利用遞迴去實現dfs可以讓**看上去很簡潔

遞迴的時候需要講話當前程式中的變數及及狀態壓入到系統的棧裡面

壓入和彈出都需要較多的時間,如果需要壓入很深的棧,會造成執行效率低下。

dfs非遞迴實現:

棧的資料結構也支援壓入和彈出操作。

bool dfs(int maze,int x,int y)

}for(int d =0;d<4;d++) //如果不是就從4個方向上去嘗試

); //將各個方向上的點壓入堆疊,並把標記為訪問過

maze[i][j] =-1;}}

return false;//嘗試了所有可能還沒有找到b,返回false

}

演算法 深度優先和廣度優先

深度優先搜尋屬於圖演算法的一種,是乙個針對圖和樹的遍歷演算法,英文縮寫為dfs depth first search 深度優先搜尋利用深度優先搜尋演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆資料結構來輔助實現dfs演算法。文字描述...

深度優先 廣度優先

父類定義 class people def init self,name,age,weight self.name name self.age age self.weight weight defspeak self print s 說 我 d 歲。self.name,self.age 單繼承示例 ...

深度優先演算法和廣度優先演算法

圖形的深度優先搜尋法 void dfs int current 主程式 建立圖形後,將遍歷內容印出.void main 邊線陣列 int i for i 1 i 8 i creategraph node,20 建立圖形 printf 圖形的鄰接鍊錶內容 n for i 1 i 8 i printf ...