这个要进行回溯路径,用二维数组保存一下撒
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int a[20][10];
typedef pair<int,int>p;
struct point
{
int x;
int y;
}c[20][20];
queue<p> q;
int x[]={1,0,-1,0};
int y[]={0,1,0,-1};
void bfs()
{
a[0][0]=1;
q.push(p(0,0));
int i;
p hd,t;
int xx,yy;
c[0][0].x=0;
c[0][0].y=0;
while(q.size())
{
hd=q.front();
q.pop();
for(i=0;i<4;i++)
{
xx=hd.first+x[i];
yy=hd.second+y[i];
if(xx<0||yy<0||xx>=5||yy>=5||a[xx][yy])
continue;
a[xx][yy]=1;
c[xx][yy].x=hd.first;
c[xx][yy].y=hd.second;
q.push(p(xx,yy));
}
}
}
int main()
{
memset(c,0,sizeof(c));
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cin>>a[i][j];
bfs();
int m=4,n=4;
point path[20];
path[0].x=4;
path[0].y=4;
int k=1;
while(c[m][n].x||c[m][n].y)
{
path[k].x=c[m][n].x;
path[k].y=c[m][n].y;
int tt=m;//一开始没有tt变量,直接m=c[m][n].x,n=c[m][n].y,还始终找不到错误在哪,尼马,后面一个m值都变了
m=c[m][n].x;
n=c[tt][n].y;
k++;
}
cout<<"(0, 0)"<<endl;
for(k--;k>=0;k--)
{
cout<<"("<<path[k].x<<", "<<path[k].y<<")"<<endl;
}
}