题目大意:
解决:bfs,关键是对路径的保存
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int map[5][5];
struct node
{
int x,y;
};
//此处定义了一个存放上一个坐标的路径结构体,采用递归输出
node path[5][5];
queue<node> q;
int sx=1,sy=1;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
int cnt=0;
node tmp;
void print(int x,int y)
{
if(x!=-1 &&y!=-1)
{
print(path[x][y].x,path[x][y].y);
printf("(%d, %d)\n",x,y);
}
}
void bfs()
{
tmp.x=0;
tmp.y=0;
path[0][0].x=-1;
path[0][0].y=-1;
q.push(tmp);
while(!q.empty())
{
tmp=q.front();
if(tmp.x==4 && tmp.y==4)break;
q.pop();
node tmp1;
for(int i=0;i<4;i++)
{
tmp1.x=tmp.x+dx[i];
tmp1.y=tmp.y+dy[i];
if(!map[tmp1.x][tmp1.y] && tmp1.x>=0 && tmp1.x<5 && tmp1.y>=0 && tmp1.y<5 )
{
q.push(tmp1);
path[tmp1.x][tmp1.y].x=tmp.x;
path[tmp1.x][tmp1.y].y=tmp.y;
//此处也是易错点,由于访问过了,直接堵住回路就行了
map[tmp.x][tmp.y]=1;
}
}
}
print(4,4);
}
int main()
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
scanf("%d",&map[i][j]);
bfs();
system("pause");
return 0;
}
浙公网安备 33010602011771号