用BFS做,但要注意的是,记录正确路线后一个点 的前一个点,以方便顺利输出对象。
#include <iostream>
#include <memory.h>
using namespace std;
struct node
{
int x,y,pre;
}dog[110];
int cat[110][110];
int rabbit[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
void print(int i)
{
if(dog[i].pre != -1)
{
print(dog[i].pre);
cout<< "(" << dog[i].x << "," << " " << dog[i].y << ")" << endl;
}
}
void bfs(int x1,int y1)
{
int front = 0,rear = 1,tx,ty;
dog[front].x = x1;
dog[front].y = y1;
dog[front].pre = -1;
while(front < rear)
{
for(int i = 0;i < 4;i ++)
{
tx = dog[front].x + rabbit[i][0];
ty = dog[front].y + rabbit[i][1];
if(tx < 0 || tx >4 || ty < 0 || ty > 4 ||cat[tx][ty] == 1)
continue;
else
{
cat[tx][ty] = 1;
dog[rear].x = tx;
dog[rear].y = ty;
dog[rear].pre = front;
rear ++;
}
if(tx == 4 && ty == 4)
print(front);
}
front ++;
}
}
int main()
{
memset(cat,0,sizeof(cat));
for(int i = 0;i < 5;i ++)
for(int j = 0;j < 5;j ++)
cin >> cat[i][j];
cout << "(0, 0)" << endl;
bfs(0,0);
cout << "(4, 4)" << endl;
return 0;
}