BFS经典题 poj 3984

#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_41988889/article/details/89424851