迷宮問題(廣搜與深搜)

2021-09-10 17:06:56 字數 1387 閱讀 9883

定義乙個二維陣列: 

int maze[5][5] = ;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

input

乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。

output

左上角到右下角的最短路徑,格式如樣例所示。

sample input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

sample output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

利用佇列進行廣搜,不讓求步數,但是要記錄路徑;

#include#includeusing namespace std;

int vis[6][6],mp[6][6];

struct node pre[10][10];

int dir[4][2]= ,,,};

void bfs(node a)

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

} }}void print(int x,int y) else

print(pre[x][y].x,pre[x][y].y);

printf("(%d, %d)\n",x,y);

}int main()

} node a;

a.x=0,a.y=0;

bfs(a);

print(4,4);

return 0;

}

深搜**:

#includeusing namespace std;

int pre[10][10],mp[6][6];

int vis[10][10];

int dir[4][2]=;

struct nodea[10][10];

void dfs(int x,int y)

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

}void print(int x,int y)

print(a[x][y].x,a[x][y].y);

printf("(%d, %d)\n",x,y);

}int main()

dfs(0,0);

print(4,4);

}

深搜與廣搜

深搜是一種一條路走到黑,碰壁就倒退的演算法。運用遞迴思想,如果到了不符合條件的節點就撤回一步,然後再選擇另一條路走下去。如果這個節點的所有路徑都走完了,再撤回一步。最簡單的模板 int x 4 int y 4 上下左右四個方向走。也可以八個方向,這裡我就不寫了。void dfs int fx,int...

廣搜與深搜演算法

bfs 廣度優先搜尋 從起點開始,檢視與其相鄰並且滿足題中條件的周圍的所有點 第一層點 然後再以他們為 起點 再去檢視與他們相鄰的第二層的點,一層一層的遍歷,直到找到目標。廣搜一般用於尋找最小路徑等型別題目,因為是層層尋找,所以尋找到的目標一定是最好的解,其大概過程如同一滴水滴到水池產生的水波。但是...

迷宮問題 廣搜

定義乙個二維陣列 int maze 5 5 queue 26 int head 0,tail 0,a 5 5 book 5 5 void function int tail 引數是隊尾 else function queue tail f 如果隊尾的父節點不是0 就將該父節點作為新的隊尾繼續呼叫 這...