1,BFS
可以求解最短路徑等?最優(yōu)解?問題
BFS? 先進先出
在程序?qū)崿F(xiàn) BFS 時需要考慮以下問題:
隊列:用來存儲每一輪遍歷得到的節(jié)點银择;
標記:對于遍歷過的節(jié)點,應(yīng)該將它標記累舷,防止重復(fù)遍歷
?path?=?[[0,0]]? ? ##頭結(jié)點放入
????????while?path:
????????????for?_?in?range(len(path)):? ?遍歷每一層節(jié)點
????????????????for?new_x,?new_y?in?[[x?-?1,?y?-?1],?[x?-?1,?y],?[x?-?1,?y?+?1],?[x,?y?-?1],
?????????????????????????????????????[x,?y?+?1],?[x?+?1,?y?-?1],?[x?+?1,?y],?[x?+?1,?y?+?1]]:? #幾個方向的遍歷
? ? ? ? ? ? ? ? ? ? ? ? ? ? 各種邊界條件的判斷
? ? ? ? ? ? ? ? ? ? ? ? ? ? 將新的節(jié)點加path
2,DFS
在程序?qū)崿F(xiàn) DFS 時需要考慮以下問題:
棧:用棧來保存當(dāng)前節(jié)點信息浩考,當(dāng)遍歷新節(jié)點返回時能夠繼續(xù)遍歷當(dāng)前節(jié)點”挥可以使用遞歸棧析孽。
標記:和 BFS 一樣同樣需要對已經(jīng)遍歷過的節(jié)點進行標記。
先進后出
帶數(shù)組的版本
不帶數(shù)組只怎,用遞歸代替