深搜,顧名思義,是深入其中、直取結果的一種搜尋方法。
如果深搜是乙個人,那麼他的性格一定倔得像頭牛!他從一點出發去旅遊,只朝著乙個方向走,除非路斷了,他絕不改變方向!除非四個方向全都不通或遇到終點,他絕不後退一步!因此,他的姐姐廣搜總是嘲笑他,說他是個一根筋、不撞南牆不回頭的傢伙。
深搜很討厭他姐姐的嘲笑,但又不想跟自己的親姐姐鬧矛盾,於是他決定給姐姐講述自己旅途中的經歷,來改善姐姐對他的看法。他成功了,而且只講了一次。從那以後他姐姐不僅再沒有嘲笑過他,而且連看他的眼神都充滿了讚賞。他以為是自己路上的各種英勇征服了姐姐,但他不知道,其實另有原因……
深搜是這樣跟姐姐講的:關於旅行呢,我並不把目的地的風光放在第一位,而是更注重於沿路的風景,所以我不會去追求最短路,而是把所有能通向終點的路都走一遍。可是我並不知道往哪走能到達目的地,於是我只能每到乙個地方,就向當地的人請教各個方向的道路情況。為了避免重複向別人問同乙個方向,我就給自己規定1
:先問北,如果有路,那就往北走,到達下乙個地方的時候就在執行此規定,如果往北不通,我就再問西,其次是南、東,要是這四個方向都不通或者抵達了終點,那我回到上乙個地方,繼續探索其他沒去過的方向。我還要求自己要記住2
那些幫過他的人,但是那些給我幫倒忙的、讓我白費力氣的人,要忘記3
他們。有了這些規定之後,我就可以大膽的往前走了,既不用擔心到不了不目的地,也不用擔心重複走以前的路。哈哈哈……
void
dfs(
)//n代表目前dfs的深度
for(inti=
0;i<
4;i++
)//列舉四個方向
}
廣搜,顧名思義,是多管齊下、廣撒網的一種搜尋方法
如果廣搜是乙個人,那麼她一定很貪心,而且喜新厭舊!她從一點出發去旅遊,先把與起點相鄰的地方全部遊覽一遍,然後再把與她剛遊覽過的景點相鄰的景點全都遊覽一邊……一直這樣,直至所有的景點都遊覽一遍。
廣搜屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。類似樹的按層遍歷,其過程為:首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過可到達的鄰接點vi1、vi2…vit,並均標記為已訪問過,然後再按照vi1、vi2…vit 的次序,訪問每乙個頂點的所有未被訪問過的鄰接點,並均標記為已訪問過,依此類推,直到圖中所有和初始點vi有路徑相通的頂點都被訪問過為止。
void
bfs(
)//判斷是否是終點
for(int i=
0;i<
4;i++
)//四個方向}}
}
廣搜列印路徑:雖然它有多個後繼結點,但前驅節點只有乙個。所以可以逆向列印路徑,即從終點出發找通向起點的路徑
遍歷四個方向 ↩︎
標記,標識已經走過的結點 ↩︎
取消標記 ↩︎
深搜和廣搜的原理及優缺點
深搜原理 深搜,顧名思義,是深入其中 直取結果的一種搜尋方法。如果深搜是乙個人,那麼他的性格一定倔得像頭牛!他從一點出發去旅遊,只朝著乙個方向走,除非路斷了,他絕不改變方向!除非四個方向全都不通或遇到終點,他絕不後退一步!因此,他的姐姐廣搜總是嘲笑他,說他是個一根筋 不撞南牆不回頭的傢伙。深搜很討厭...
深搜和廣搜的原理及優缺點
深搜原理 深搜,顧名思義,是深入其中 直取結果的一種搜尋方法。如果深搜是乙個人,那麼他的性格一定倔得像頭牛!他從一點出發去旅遊,只朝著乙個方向走,除非路斷了,他絕不改變方向!除非四個方向全都不通或遇到終點,他絕不後退一步!因此,他的姐姐廣搜總是嘲笑他,說他是個一根筋 不撞南牆不回頭的傢伙。深搜很討厭...
深搜和廣搜 原理彼此的優缺點
一般來說,廣搜常用於找單一的最短路線,或者是規模小的路徑搜尋,它的特點是 搜到就是最優解 而深搜用於找多個解或者是 步數已知 好比3步就必需達到前提 的標題,它的空間效率高,然則找到的不必定是最優解,必需記實並完成全數搜尋,故一般情況下,深搜需要很是高效的剪枝 優化 像搜尋最短路徑這些的很顯著是用廣...