简单的广搜打路径:点击打开链接;
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int go[4][2]= {1,0,-1,0,0,1,0,-1};
int map[1005][1005];
struct gg
{
int x,y,step;
};
gg road[1000][1000];
gg aa[100];
queue<gg>q;
void fg(int xx,int yy)
{
int a,b,i=0;
while(xx!=0||yy!=0)
{
a=xx,b=yy;
aa[i].x=road[a][b].x;//记录上一个点;
aa[i++].y=road[a][b].y;
xx=road[a][b].x;
yy=road[a][b].y;
}
for(i--; i>=0; i--)
printf("(%d, %d)\n",aa[i].x,aa[i].y);
printf("(4, 4)\n");
return;
}
void ff()
{
gg n1,n2;
n1= {0,0,0};
q.push(n1);
map[0][0]=1;
while(!q.empty())
{
n1=q.front();
if(n1.x==4&&n1.y==4)
{
fg(4,4);
return ;
}
q.pop();
for(int h=0; h<4; h++)
{
int xx=n1.x+go[h][0],yy=n1.y+go[h][1];
if(xx>=0&&xx<=4&&yy>=0&&yy<=4&&map[xx][yy]==0)
{
map[xx][yy]=1;
n2= {xx,yy,n1.step+1};
q.push(n2);
road[xx][yy].x=n1.x;
road[xx][yy].y=n1.y;
}
}
}
}
int main()
{
int i,j;
for(i=0; i<5; i++)
for(j=0; j<5; j++)
scanf("%d",&map[i][j]);
ff();
return 0;
}