poj3984~用bfs求最短路~同时记录路径

来源:互联网 发布:4g手机为什么用不了4g网络 编辑:程序博客网 时间:2024/05/29 13:56

今晚因为一个小小而隐蔽的错误害得我折腾了一个小时,都以为闹鬼了

xx=px[xx][yy];

yy=py[xx][yy];

这两句看似很正确,但是我却忘记了第一步会改变xx的值,使得下一步中的py就不再是那个py了!要不要我交换了一下次序还真没发现!

唉,用bfs求最短路径很容易,但是记录路径就麻烦死了,算是学到了点经验

#include<iostream>#include<string>#include<queue>#define M 8using 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]);}}


0 0