bfs 较为全面的迷宫路径问题,包括路径的打印,起点到任一点的最小步数.
2012-07-21 20:03
357 查看
/*提供的输入数据: 输入行数列数 起点终点 然后输入任意点的位置,可求起点到终点的距离, 0 0 表示结束. input: 6 5 0 0 0 4 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 4 1 3 4 0 4 4 0 0 output: DDDDRRUUURUR 12 10 4 10 #include <iostream> #include <stdio.h> #include <cstring> using namespace std; const int mm=301; int map[mm][mm]; int vis[mm][mm]; int dist[mm][mm]; int fa[mm][mm]; int last_dir[mm][mm]; //int dx[4]= {0,0,1,-1}; //int dy[4]= {1,-1,0,0}; //char name[]=""; int dx[] = {-1,1,0,0}; int dy[] = {0,0,-1,1}; char name[] = "UDLR";//??? int c[mm*mm]; int q[mm*mm]; int n,m,x,y; void bfs(int x,int y) { int u=x*m+y; vis[x][y]=1; dist[x][y]=0;//起点距离初始化为0 fa[x][y]=u;//起点的祖先就是本身,用于起点寻找的标志 int front=0,rear=0; q[rear++]=u;//入队 while(front<rear) { u=q[front++];//出队,节点拓展 x=u/m; y=u%m; for(int i=0; i<4; i++)//状态的转移 { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny]&&map[nx][ny])//条件判断 { int v=nx*m+ny; q[rear++]=v;//符合条件入队 dist[nx][ny]=dist[x][y]+1;//距离更新 fa[nx][ny]=u;//记录祖先 vis[nx][ny]=1; last_dir[nx][ny]=i;//记录路径 } } } } void print(int x,int y) { int i=0; for(;;) { int fx=fa[x][y]/m; int fy=fa[x][y]%m; if(fx==x&&fy==y)//满则该条件的点为起点 break; c[i++]=last_dir[x][y];//有于是从终点开始寻找,将路径记录后反向输出 x=fx; y=fy; } while(i--) putchar(name[c[i]]); //for(int j=0;j<i;j++) //printf("%d ",c[j]); } int main() { int x1,y1,x2,y2; int p,q; while(scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2)==6) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) scanf("%d",&map[i][j]); bfs(x1,y1); //打印路径 print(x2,y2); //可求起点到任意点的最短距离 bool ret=false; while(scanf("%d%d",&p,&q)==2) { if(p==0&&q==0) { ret=true; break; } printf("%d\n",dist[p][q]); } if(ret) break; } return 0; }
相关文章推荐
- 迷宫问题:利用BFS打印出从起点到终点的路径(java版)
- BFS之最简单的迷宫问题(并打印路径)
- bfs迷宫问题--打印路径
- POJ 3984 迷宫问题(bfs+打印路径)
- poj3984 迷宫问题 简单bfs打印路径
- poj 3984迷宫问题(bfs加打印路径)
- nyoj——58 最小步数(DFS,BFS 迷宫问题)
- POJ ~ 3984 ~ 迷宫问题 (BFS+打印路径)
- BFS解迷宫问题,并打印最短路径
- poj 3984 迷宫问题(bfs 打印路径)
- HDU 1104 Remainder (BFS求最小步数 打印路径)
- BFS搜索迷宫,求起点到终点的最小步数
- 迷宫问题bfs+打印路径
- BFS(最短路+路径打印) POJ 3984 迷宫问题
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
- POJ 3984 迷宫问题(BFS+打印路径)
- POJ-3984-迷宫问题(BFS打印路径)
- POJ 3984 迷宫问题【bfs路径打印】
- poj 3984 迷宫问题打印路径模板
- poj 3984 迷宫问题(BFS+输出路径)