深度優先搜尋(DFS)

2022-06-29 05:48:09 字數 2080 閱讀 8759

指定的起始點和終點,確定好當前點與鄰接點之間的偏移值、結束搜尋的條件、符合訪問的點所需條件、回溯處理

1、若當前點的鄰接點有未被訪問的,則選乙個進行訪問;

2、若當前點的鄰接點都不符合訪問條件,退回到當前點的上乙個點;

3、直到訪問到目標終點,或是所有點均以訪問仍無法到達終點;

dfs可以通過遞迴函式、棧(先入後出的儲存結構)來實現

前段時間正好幫同學敲乙個迷宮的講解,針對具體題目h是牆,o是路。。。

**由c++編寫

1 #include 2 #include 3 #include 

4 #include 5 #include 6

using

namespace

std;

78 typedef struct

point;

11void

out(int a[100][100], int m, int n)18}

1920

intmain(); //

走迷宮的過程中上下方向的偏移值

32int d2[4] = ; //

走迷宮的過程中左右方向的偏移值

3334 cout << "

請輸入第

"<< z+1

<< "

個迷宮的行列:

"<

35 cin >> m >>n;

3637 cout << "

請輸入第

"<< z+1

<< "

個迷宮:

"<

38for(i = 0; i < m; i++)

46 }//

out(map, m, n);

//檢視迷宮地圖

4748 cout << "

請輸入起點座標和終點座標:

"<

49 cin >> start.x >> start.y >> end.x >>end.y;

5051 start.step = 1

;52 map[start.x][start.y] = -1; //

將起始點在地圖上標記出來

53s.push(start);

54while(!s.empty())72}

73if(i == 4) //

當i為4的時候,就是四周都不能走

74s.pop();75}

76if(s.empty())//

out(map, m, n);

//檢視迷宮地圖行走情況

8081 i = 0

;82 point *road = new point[m*n]; //

用於輸出走出迷宮的路徑

83while(!s.empty())

89 cout << "

走出迷宮共用了

"<< i << "

步,經過的點為:";

90for(i = 1; i < j; i++)

91 cout << road[i].x << ","

<< road[i].y << "

->";

92 cout << road[i].x << ","

<< road[i].y <

94 cout << "

請輸入需要走幾個迷宮:

"<

96return0;

97}

等待更新。。。

深度優先搜尋DFS

作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...

深度優先搜尋 DFS

深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...

深度優先搜尋(dfs)

深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...