#include<iostream>
#include<cstdio>
using namespace std;
int arr[5][5];
int front = 0,rear = 1;
struct node{
int x;
int y;
int pre; //当前节点的前一个节点
}q[100];
int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1};
void print(int i){
if(q[i].pre != -1){
print(q[i].pre);
printf("(%d, %d)\n",q[i].x,q[i].y);
}
}
void bfs(int x,int y){
q[front].x = x;
q[front].y = y;
q[front].pre = -1;
while(rear > front){
for(int i = 0;i < 4;i ++){
int a = dx[i] + q[front].x;
int b = dy[i] + q[front].y;
if(a >= 0 && a < 5 && b >=0 && b < 5 && !arr[a][b]){
arr[a][b] = 1;
q[rear].x = a;
q[rear].y = b;
q[rear].pre = front;
rear ++;
}
if(a == 4 && b == 4){
print(front);
}
}
front ++;
}
}
int main()
{
for(int i = 0;i < 5;i ++){
for(int j = 0;j < 5;j ++){
cin>>arr[i][j];
}
}
cout<<"(0, 0)"<<endl;
bfs(0,0);
cout<<"(4, 4)"<<endl;
return 0;
}
BFS经典题 poj 3984
猜你喜欢
转载自blog.csdn.net/weixin_41988889/article/details/89424851
今日推荐
周排行