通俗易懂的迷宫问题· bfs
2018-03-06 14:57
246 查看
1086.迷宫问题
Time Limit: 1000 MS Memory Limit: 32768 KBTotal Submission(s): 64 Accepted Submission(s): 29
Description
定义一个二维数组:int maze[5][5] = {
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,
};
它表示一个迷宫,其中的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)
刚接触bfs时这道题没有思路, 但现在突然想通了 ,希望可以帮到你们,详解代码
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int dir[4][2] ={1,0, 0,1, -1,0, 0,-1};
int a[7][7];
bool visit[7][7]; 标记一个点是否访问过。以免陷入无限循环!!
struct note 结构体记载横 纵坐标
{
int x;
int y;
}s,pre[7][7];///pre【x】【y】用来记载(x,y)的前一个点
int bfs( )
{
int i, j;
queue<note>q;
q.push( {0, 0});
visit[0][0] = 1;
while( !q.empty( ))
{
s = q.front();
q.pop();
for( i = 0; i<4; i++)
{
int x = dir[i][0] + s.x;
int y =dir[i][1] + s.y;
if( a[x][y] == 0 && !visit[x][y] && x>=0 && x<=4 &&y<=4&&y>=0)
{
visit[x][y] = 1;
q.push({x, y});
pre[x][y].x = s.x;
pre[x][y].y = s.y;
}
}
}
}
void put( int x, int y ) 这个函数我也是参考别人的代码 自己走走也能行得通 不过个人对递归
{ 理解不深
if( x == 0 && y == 0) 触底反弹, 比如 (4, 4)进来,put, put,,,,,直到(0,0)输出,然后
{ 一层一层返回,执行printf
printf("(%d, %d)\n", x, y);
return ;
}
put( pre[x][y].x, pre[x][y].y);
printf("(%d, %d)\n", x, y);
}
int main()
{
int i, j, k;
for( i = 0; i<5; i++)
for( j = 0; j<5; j++)
scanf("%d", &a[i][j]);
bfs();
put( 4, 4 );
return 0;
}
有不妥的地方多多理解 谢谢观看
相关文章推荐
- POJ3984 迷宫问题 —— BFS
- POJ-3984迷宫问题(典型BFS找最短路径)
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 3984 迷宫问题 bfs
- POJ 迷宫问题(经典BFS问题)
- 广度优先搜索BFS(迷宫问题)
- 迷宫问题---poj3984(bfs,输出路径问题)
- bfs简单题 迷宫问题
- POJ 3984 迷宫问题(bfs)
- 【BFS+保存路径】POJ 3984 迷宫问题
- SDJZUOJ迷宫问题(BFS)
- 迷宫问题 经典bfs问题【bfs】
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- nyoj——58 最小步数(DFS,BFS 迷宫问题)
- poj3984 迷宫问题(图-BFS)
- 迷宫问题 POJ 3984 【BFS】
- POJ 3984-迷宫问题 BFS
- 【哈工大oj】1621 - 迷宫问题II(bfs,优先队列)
- poj 迷宫问题(路径记录)(DFS,BFS)
- 迷宫问题 BFS求具体路径坐标