深度優先搜尋

2022-07-29 04:09:15 字數 1492 閱讀 4791

深度優先遍歷的思想:從乙個頂點v0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。

深度優先搜尋可以用棧來實現,在棧中儲存從起始結點,到當前結點路徑上的所有結點,一般運用遞迴實現, 遞迴的基本思想:某個函式直接或間接地呼叫自身。遞迴的關鍵問題:1.找出遞迴公式。2、找出遞迴終止條件。

例題:走迷宮問題(深度優先搜尋實現)

給定乙個二維陣列 int map[5][5] = ;

它表示乙個迷宮,其中「1」表示牆壁,「0」表示可以走的路,只能橫著走或者豎著走,不能斜著走,要求編寫程式求出從左上角到右下角的最短路徑的長度,例如上述問題輸出結果為:8

四個方向,每次選擇乙個方向走,不通時走下乙個方向,如果四個方向都不能走時,則退一格。

#include#includeusing namespace std ;

struct dot d[100][100];

int m , n ;

bool is_ok(int x , int y)

int dx = ;

int dy = ;

int vis[100][100] = , map[100][100] ;

bool flag = 0 ;

void dfs(int x , int y)

for(int i = 0 ; i < 4 ; i++)

}}int main()

如果想輸出所走路徑,可以使用以下方法:
#include#include#includeusing namespace std ;

struct dot d[100][100];

int m , n ;

bool is_ok(int x , int y)

int dx = ;

int dy = ;

int vis[100][100] = , map[100][100] ;

bool flag = 0 ;

void dfs(int x , int y)

for(int i = 0 ; i < 4 ; i++)

}}int main()

同樣可以使用棧來實現深度優先搜尋:
#include#include#include#includeusing namespace std ;

struct dot ;

int m , n ;

stacks ;

bool is_ok(int x , int y)

int dx = ;

int dy = ;

int vis[100][100] = , map[100][100] ;

void dfs()

for(int i = 0 ; i < 4 ; i++) }}

return ;

}int main()

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...