题目大意:中文题- -;
解题思路:用数组模拟队列,记一下每一个元素上一个元素位置就可以了;
链接:http://poj.org/problem?id=3984
代码:
#include <iostream>
using namespace std;
int map[6][6];
int dir[4][2]= {1,0,-1,0,0,1,0,-1};
struct node
{
int x,y;
int pre;
} q[100];
void print(int i)
{
if(q[i].pre!=-1)
{
print(q[i].pre);
cout<<"("<<q[i].x<<", "<<q[i].y<<")"<<endl;
}
}
void bfs()
{
int head,tail;
head=0;
tail=1;
q[head].x=0;
q[head].y=0;
q[head].pre=-1;
while(head<tail)
{
node p;
for(int i=0; i<4; i++)
{
p.x=q[head].x+dir[i][0];
p.y=q[head].y+dir[i][1];
p.pre=head;
if(p.x<0||p.x>=5||p.y<0||p.y>=5||map[p.x][p.y])
continue;
else
{
map[p.x][p.y]=1;
q[tail++]=p;
}
if(p.x==4&&p.y==4) print(head);
}
head++;
}
}
int main()
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
cin>>map[i][j];
cout<<"(0, 0)"<<endl;
bfs();
cout<<"(4, 4)"<<endl;
return 0;
}