#include<iostream>
#include<algorithm>
#include<string.h>
#include<stack>
#include<cstdio>
#include<queue>
using namespace std;
int a[6][6];
int next[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
struct point
{
int x,y;
point():x(-1),y(-1) {};
};
point ha[200][200];
bool vis[10][10];
int bfs(int bb,int b)
{
queue<point>aa;
while(!aa.empty())
aa.pop();
point u;
u.x=bb;
u.y=b;
aa.push(u);
vis[bb][b]=1;
while(!aa.empty())
{
point ji=aa.front();
aa.pop();
if(ji.x==4&&ji.y==4)
return 0;
for(int i=0; i<4; i++)
{
int xx=ji.x+next[i][0],yy=ji.y+next[i][1];
if(xx>=0&&xx<5&&yy>=0&&yy<5&&a[xx][yy]!=1&&!vis[xx][yy])
{
point uu;
uu.x=xx;
uu.y=yy;
ha[xx][yy]=ji;
aa.push(uu);
vis[xx][yy]=1;
}
}
}
}
stack<point>pp;
int dfs(int a,int b)
{
if(ha[a][b].x==-1&&ha[a][b].y==-1)
return 0;
else
{
point yy;
yy.x=a;
yy.y=b;
pp.push(yy);
dfs(ha[a][b].x,ha[a][b].y);
}
}
int main()
{
memset(a,0,sizeof a);
memset(vis,0,sizeof vis);
memset(ha,-1,sizeof ha);
while(!pp.empty())
pp.pop();
for(int i=0;i<5;i++)
{
for(int k=0;k<5;k++)
cin>>a[i][k];
}
bfs(0,0);
int o=dfs(4,4);
printf("(0, 0)\n");
while(!pp.empty())
{
point h=pp.top();
pp.pop();
if(pp.empty())
{
printf("(%d, %d)",h.x,h.y);
}
else
printf("(%d, %d)\n",h.x,h.y);
}
}
POJ 3984 (BFS+路径保存)
最新推荐文章于 2022-04-29 18:31:43 发布