题目地址:http://poj.org/problem?id=3984
/*
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*/
#include
//#include
#define size 50
int a[5][5];
int dis[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
struct Node{
int x,y,pre;//pre 记录rear对应的front。frontid
}quene[size];
int front=0;
int rear=0;
int visit[5][5];
void bfs(int sx,int sy,int ex,int ey){
quene[0].x=sx,quene[0].y=sy,quene[0].pre=-1;
rear=rear+1;
visit[sx][sy]=1;
int i;
while(front
5||newy<0||newy>5||a[newx][newy]==1||visit[newx][newy]==1)
continue;
quene[rear].x=newx;
quene[rear].y=newy;
quene[rear].pre=front;
rear++;
visit[newx][newy]=1;
if(newx==ex&&newy==ey){
return;
}
}
front++;
// printf("%d",rear);
}
}
void print(int a){
int t;
t=quene[a].pre;
if(t==0){
printf("(0, 0)\n");
printf("(%d, %d)\n",quene[a].x,quene[a].y);//为什么是a,而不是t? 首先t的话,a那层就没法输出
return ;
}
else{
print(t);
printf("(%d, %d)\n",quene[a].x,quene[a].y);
}
}
main(){
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
bfs(0,0,4,4);
print(front);//为什么是rear-1,而不是rear quene[rear].pre=front;rear++;
printf("(4, 4)");
}