用vector保存路径好像写错了,一直输出错误,但却改不出来,以后确定路径的问题还是用dfs时搜一遍吧。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int a[10][10],vis[10][10];
struct node{
int x,y;
node(int x,int y): x(x),y(y) {};
};
struct fa{
int x,y;
};
queue<node> q;
vector<node> v;
fa f[10][10];
void dfs(int i,int j)
{
if(i==0&&j==0) return ;
dfs(f[i][j].x,f[i][j].y);
printf("(%d, %d)\n",i-1,j-1);
}
int main()
{
int ok=0;
f[1][1].x=0,f[1][1].y=0;
memset(vis,0,sizeof(vis));
int x,y;
for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
scanf("%d",&a[i][j]);
}
}
vis[1][1]=1;
q.push(node(1,1));
while(!q.empty())
{
node ans=q.front();
q.pop();
x=ans.x,y=ans.y;
if(x==5&&y==5) {
ok=1;
break;
}
if(x>1&&!vis[x-1][y]&&a[x-1][y]==0) {
f[x-1][y].x=x;
f[x-1][y].y=y;
vis[x-1][y]=1;
q.push(node(x-1,y));}
if(y>1&&!vis[x][y-1]&&a[x][y-1]==0) {
f[x][y-1].x=x;
f[x][y-1].y=y;
vis[x][y-1]=1;
q.push(node(x,y-1));}
if(x<5&&!vis[x+1][y]&&a[x+1][y]==0) {
f[x+1][y].x=x;
f[x+1][y].y=y;
vis[x+1][y]=1;
q.push(node(x+1,y));}
if(y<5&&!vis[x][y+1]&&a[x][y+1]==0) {
f[x][y+1].x=x;
f[x][y+1].y=y;
vis[x][y+1]=1;
q.push(node(x,y+1));}
}
if(ok)
{
dfs(5,5);
}
// for(int i=1;i<=5;i++)
// {
// for(int j=1;j<=5;j++)
// {
// cout<<f[i][j].x<<" "<<f[i][j].y<<" ";
// }
// cout<<endl;
// }
return 0;
}