您的位置:首页 > 其它

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]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bfs