迷宮尋路三大演算法 BFS,DFS,A

2021-08-19 20:49:46 字數 2735 閱讀 9782

這是我們的資料結構作業本加我們自己再網上找演算法記錄下來,不過本人比較執著畫了幾天時間還是把這些演算法自己寫出來了。總得來說網上所說的大體演算法應該就有三種(bfs,dfs,a*)

這裡是乙個驗證**是南陽oj的一道題這是**

好了不說廢話開始吧

寬度優先搜尋演算法(又稱廣度優先搜尋)是最簡便的圖的搜尋演算法之一。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。

如上所示我要做的就是搜尋整張,定義乙個二維陣列visit, visit[x][y]判斷座標x,y是否被訪問,初始化visit為0都沒有被訪問;定義乙個結構體point裡面的引數有x,y,dis;其中x,y表示座標,dis表示出發點到該節點的步數;

bfs函式操作:

1,將節點新增到佇列裡面;

2,從隊頭取出節點將其訪問狀態設為1,判斷其上下左右四個節點將符合要求的節點新增到佇列中;

3,重複1,2操作直到從佇列中取出的節點終點返回其dis;

具體**如下

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define max 10

int x, y, a, b;

struct point

;int fx[4] = , fy[4] = ;

int bfs(int x, int y,int maze[9])

//判斷是否到達目的地

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

} }}

int main()

, ,

, ,

, ,

, ,

, };

cin >> x >> y >> a >> b;

cout << bfs(x, y, maze) << endl;

} return 0;

}

深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.

顧名思義dfs就是從乙個節點出發直到不能訪問然後迴轉到上一層 也就是所說的 回溯+遞迴 實現方法就是從開始節點出發遞迴其四周只有滿足要求就呼叫函式進行遞迴最後返回;所以我設定了兩個陣列dis,visit;dis存放步數,visit判斷是否被訪問;

具體**

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define max 10

int maze[9][9] =,,

,,,,

,,,};

int x, y, a, b, dis[max][max],visit[max][max];

int dfs(int x, int y);

int next(int a,int b,int x, int y)

if (!visit[x][y])

return 0;

}// 深度優先

int dfs(int x, int y)

if (x - 1 >=0 && maze[x - 1][y] == 0) //下

if (y + 1 < 9 && maze[x][y + 1] == 0) //左

if (y - 1 >=0 && maze[x][y - 1] == 0) //右

return 0;

}int main()

return 0;

}

##a演算法##

a演算法,a*(a-star)演算法是一種靜態路網中求解最短路徑最有效的直接搜尋方法,也是解決許多搜尋問題的有效演算法。演算法中的距離估算值與實際值越接近,最終搜尋速度越快。

a*演算法就是對於每個節點設乙個權值 f=g+h;g表示到開始節點的距離,h表示到終點的距離;然後從開始節點開始將可以訪問的節點內新增到乙個鍊錶中 然後再從鍊錶中取f最小的節點 將其四周可訪問的節點新增到鍊錶中 重複操作直到找到終點輸出

這是大佬寫的 a*演算法

具體**

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define max 10

int fx[4] = , fy[4] = ;

int sx, sy, ex, ey;

struct _node

;int cmp( _node a, _node b)

int weight(int x, int y)//高階演算法不會 來個曼哈頓距離計算

int fun_a(int maze[9][9])

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

}} return 0;

}int main()

, ,

, ,

, ,

, ,

, };

cin >> sx >> sy >> ex >> ey;

cout << fun_a(maze) << endl;

} return 0;

}

python迷宮尋路 迷宮尋路問題 A 演算法

迷宮尋路問題 a 演算法 迷宮尋路問題是人工智慧中的有趣問題,如何表示狀態空間和搜尋路徑是尋路問題的重點,本文的主要內容是a 搜尋演算法的理解和應用,首先對基本知識和演算法思想進行了解,再通過其對迷宮問題求解應用,編寫 python 程式進行深入學習。1.搜尋區域 我們假設某個人要從 start 點...

迷宮尋路(A星尋路演算法)

題目 假設我們有乙個7 5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。解題思路 需要引入兩個集合和乙個公式,如下 具體步驟 把起點放入openlist 檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路...

迷宮尋路(bfs)

第一次寫部落格,希望能把基礎的演算法記錄下來,以後快要忘記了可以拿來複習。題目 輸入輸出要求 樣例 輸入樣例 8 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1...