經典迷宮問題

2021-07-04 02:52:38 字數 1486 閱讀 1736

經典的迷宮問題,分別用了bfs與dfs解決。

#include

#include

using

namespace

std;

/*6 8

0 0 1 1 0 1 1 1

1 0 1 0 1 0 1 0

0 0 0 0 0 1 1 1

0 1 1 1 0 0 1 1

1 0 0 1 1 0 0 0

0 1 1 0 0 1 1 0

*/struct point;

int **maze, width, height;

point **pre;

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

//輸入迷宮

void input()

for (int i = 0; i <= height + 1; i++)

maze[i][0] = maze[i][width + 1] = 1;

for (int j = 0; j <= width + 1; j++)

maze[0][j] = maze[height + 1][j] = 1;

for (int i = 1; i < height + 1; i++)

for (int i = 0; i <= height + 1; i++)

cout

<< endl;

}}bool bfs(point start, point end)

queue

queue;

point now;

queue.push(start);

maze[start.x][start.y] = -1;

while (!queue.empty())

if (maze[move.x][move.y] == 0)}}

return

false;

}bool dfs(point start, point end)

point now;

point *queue = new point[100];

int count = 0;

queue[count++] = start;

maze[start.x][start.y] = -1;

while (count)

if (maze[move.x][move.y] == 0)}}

return

false;

}//顯示迷宮的路徑

void showmaze();

point endpoint = ;

while (now.x != endpoint.x && now.y != endpoint.y)

}int main()

cout

<< endl;}}

showmaze();

}

不過這裡的dfs只能找到一條通的路徑,並不能確保最短,而bfs找出來的是最短路徑。

經典迷宮問題BFS

給定乙個迷宮,入口為左上角,出口為右下角,問是否有路徑從入口到出口,若有則輸出一條這樣的路徑。注意移動可以從上 下 左 右 上左 上右 下左 下右八個方向進行。迷宮輸入0表示可走,輸入1表示牆。易得可以用1將迷宮圍起來避免邊界問題。本題採用bfs演算法給出解。注意,利用bfs演算法給出的路徑必然是一...

經典迷宮問題1

下面給出迷宮問題的乙個直觀感受圖,下圖中棕色代表通道阻塞,白色代表可用通道,紅色代表起始位置,綠色代表當前位置,黃色代表出口。迷宮1 首先將入口設為當前位置 然後從當前位置出發,按照固定順序 例如 右左上下順序 探測第乙個可用下乙個單元,然後將這下乙個單元設為當前單元,重複探測,直至遇到出口 如果探...

迷宮問題 (經典dfs)

題目 迷宮問題,給你乙個n m的矩陣,其中0代表通路,1代表阻塞。給你起點座標和終點座標,詢問 最小路徑從起點到達終點。題目分析 一般問你最小的基本都是dfs或者bfs,再其次,能用bfs的基本都能用dfs 個人理解 include include include include using nam...