poj3984~用bfs求最短路~同时记录路径
2014-08-27 23:57
225 查看
今晚因为一个小小而隐蔽的错误害得我折腾了一个小时,都以为闹鬼了
xx=px[xx][yy];
yy=py[xx][yy];
这两句看似很正确,但是我却忘记了第一步会改变xx的值,使得下一步中的py就不再是那个py了!要不要我交换了一下次序还真没发现!
唉,用bfs求最短路径很容易,但是记录路径就麻烦死了,算是学到了点经验
#include<iostream>
#include<string>
#include<queue>
#define M 8
using namespace std;
int vis[8][8],wx[30],wy[30];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,1,-1};
int px[8][8],py[8][8];
typedef struct
{
int x,y,t;
}mg;
int bfs()
{
int i,len,xx,yy,xxx,yyy;
queue<mg> q;
mg m,mm;
m.x=m.y=1;
m.t=0;
q.push(m);
vis[1][1]=1;
while(1)
{
m=q.front();
q.pop();
if(m.x==5&&m.y==5)
{
len=m.t;
xx=5;
yy=5;
wx[len]=wy[len]=4;
for(i=len-1;i>=0;i--)
{
wx[i]=px[xx][yy]-1;
wy[i]=py[xx][yy]-1;
if(i!=0)
{
xxx=px[xx][yy];
yyy=py[xx][yy];
xx=xxx;
yy=yyy;
}
}
return len;
}
for(i=0;i<4;i++)
{
mm.x=m.x+dx[i];
mm.y=m.y+dy[i];
if(vis[mm.x][mm.y]==0)
{
vis[mm.x][mm.y]=1;
px[mm.x][mm.y]=m.x;
py[mm.x][mm.y]=m.y;
mm.t=m.t+1;
q.push(mm);
}
}
}
}
int main()
{
int i,j,len;
for(i=0;i<=7;i++)
for(j=0;j<=7;j++)
vis[i][j]=1;
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
scanf("%d",&vis[i][j]);
len=bfs();
for(i=0;i<=len;i++)
{
printf("(%d,%d)\n",wx[i],wy[i]);
}
}
相关文章推荐
- POJ3984 迷宫问题 (BFS与路径记录)
- POJ3984 迷宫问题 BFS记录路径
- dijkstra求最短路并记录路径
- ZOJ-1005-Jugs【BFS+记录路径】
- 迷宫问题---poj3984(bfs,输出路径问题)
- USACO 3.2 Magic Squares(记录路径的BFS)
- EOJ Monthly 2018.1 F1. 最小 OR 路径 (EASY) 新的建图方式+vis同时记录点和代价
- uva 11374 最短路+记录路径 dijkstra最短路模板
- 天梯赛补题 - 周游世界(记录路径的最短路)
- HDU 1026 广度优先搜索,BFS+路径的记录
- poj1426 - Find The Multiple [bfs 记录路径]
- poj Pots(BFS)(路径记录)(模拟)
- C++ - 蓝桥杯 - 算法提高 学霸的迷宫 (bfs+记录路径)
- HDU 1026 Ignatius and the Princess I (BFS+记录路径)
- poj 迷宫问题(路径记录)(DFS,BFS)
- BFS和DFS记录路径
- POJ 3414 Pots【BFS+记录路径】
- uva 11374 最短路+记录路径 dijkstra最短路模板
- POJ2457 Part Acquisition(Spfa最短路+记录路径)
- hdu1026 bfs+记录路径