一道比较简单的BFS题
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#define MAX 6
using namespace std;
int map[MAX][MAX],px[MAX][MAX],py[MAX][MAX];
int movex[4]={1,-1,0,0},movey[4]={0,0,1,-1};
bool vis[MAX][MAX];
bool isborder(int x,int y)
{
if(x<0||x>4||y<0||y>4)
return true;
return false;
}
int main()
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
scanf("%d",&map[i][j]);
queue<int> x,y;
x.push(0);
y.push(0);
memset(vis,0,sizeof(vis));
int flag=0;
vis[0][0]=1;
px[0][0]=-1;
while(!x.empty())
{
int xx=x.front();
int yy=y.front();
x.pop();
y.pop();
for(int i=0;i<4;i++)
{
int itx=xx+movex[i];
int ity=yy+movey[i];
if(isborder(itx,ity)||vis[itx][ity]||map[itx][ity])
continue;
px[itx][ity]=xx;
py[itx][ity]=yy;
vis[itx][ity]=1;
x.push(itx);
y.push(ity);
if(itx==4&&ity==4)
{
flag=1;
break;
}
}
if(flag)
break;
}
int sx[1000],sy[1000],cou=0;
sx[cou]=4,sy[cou++]=4;
int itx=px[4][4],ity=py[4][4];
while(itx!=-1)
{
sx[cou]=itx;
sy[cou++]=ity;
int xx=itx,yy=ity;
itx=px[xx][yy];
ity=py[xx][yy];
}
for(int i=cou-1;i>=0;i--)
printf("(%d, %d)\n",sx[i],sy[i]);
return 0;
}