bfs pos-3984迷宫问题
2017-03-26 19:08
169 查看
迷宫问题
定义一个二维数组: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<string.h> #include<stdlib.h> int map[5][5]; //记录地图情况 int visit[5][5]; //记录是否访问过 int pre[100]; //记录每一个状态的前一个状态 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; //四个方向 struct cam { int x; int y; }list[100]; //保存可行走的地址 int go(int x,int y) //判断是否可以行走 { if(0<=x&&x<5&&0<=y&&y<5&&map[x][y]==0) return 1; return 0; } void print(int x) { int t; t=pre[x]; //t为上一个地点 if(t==0) { printf("(0, 0)\n"); printf("(%d, %d)\n",list[x].x,list[x].y); return; } else print(t); printf("(%d, %d)\n",list[x].x,list[x].y); } void bfs() { int i,head,tail; int x,y,xx,yy; //x,y 存储可存储路线;xx,yy记录(x,y)的下一个地点 memset(visit,0,sizeof(visit)); head=0; tail=1; list[0].x=0; //从(0,0)开始 list[0].y=0; pre[0]=-1; while(head<tail) { x=list[head].x; y=list[head].y; if(x==4&&y==4) { print(head); return; } for(i=0;i<4;i++) { xx=x+dir[i][0]; yy=y+dir[i][1]; if(!visit[xx][yy]&&go(xx,yy)) { visit[xx][yy]=1; //标记已经行走过,不会走回头路 list[tail].x=xx; list[tail].y=yy; pre[tail]=head; //记录现在位置的上一个位置,实现输出 tail++; } } head++; } return; } int main() { int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&map[i][j]); bfs(); return 0; }
相关文章推荐
- BFS | 3984 | 迷宫问题
- POJ 3984 迷宫问题 (BFS)
- Poj 3984 迷宫问题(BFS)
- POJ 3984 迷宫问题(bfs)
- BFS——POJ 3984 迷宫问题 解题题解
- poj 3984 迷宫问题(BFS+输出路径)
- POJ 题目3984 迷宫问题(BFS)
- K - 迷宫问题 POJ 3984 BFS路径输出
- POJ 3984 迷宫问题 bfs 难度:0
- poj 3984 迷宫问题 BFS 图的广度优先搜索
- poj 3984 迷宫问题 bfs
- poj_3984_迷宫问题_(bfs+记录路径)
- POJ 3984-迷宫问题(BFS+回溯路径)
- POJ 3984 迷宫问题(BFS)
- poj 3984 迷宫问题 (广度优先BFS)
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- poj 3984 迷宫问题(bfs)
- POJ 3984 迷宫问题 (BFS,水题)
- poj 3984 迷宫问题 (BFS+记录路径)
- POJ 3984 迷宫问题 (bfs 水)