經典的迷宮問題,分別用了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...