现在的位置: 首页 > 综合 > 正文

POJ3984迷宫

2018年04月05日 ⁄ 综合 ⁄ 共 814字 ⁄ 字号 评论关闭

直接BFS即可

#include"iostream"
#include"cstring"
using namespace std;

const int Max_L = 5;
const int Max_H = 5;

int Graph[Max_H][Max_L] = {0};


int vis[Max_H][Max_L] = {0};

struct Node{
	int fa;
	int x;
	int y;
}q[Max_L * Max_H];

void print(int idx)
{
	if(idx != q[idx].fa){
		print(q[idx].fa);
	}
	printf("(%d, %d)\n",q[idx].y,q[idx].x);
}

void bfs()
{
	int front = 0,rear = 1;
	q[0].fa = 0;
	q[0].x = q[0].y = 0;
	vis[0][0] = 1;
	int aim[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
	while(front < rear)
	{
		struct Node &u = q[front];
		if(u.x == 4 && u.y == 4)
		{
			//print this answer
			print(front);
			return;
		}
		for(int k = 0 ; k < 4 ; k ++)
		{
			struct Node &v = q[rear];
			v.x = u.x + aim[k][1];
			v.y = u.y + aim[k][0];
			if(v.x >= 0 && v.y >= 0 && v.x < Max_L && v.y < Max_H)
			{
				if(!vis[v.y][v.x] && Graph[v.y][v.x] == 0)
				{
					vis[v.y][v.x] = 1;
					v.fa = front;
					rear ++;
				}
			}
		}
		front ++;
	}
}

int main(void)
{

	for(int i = 0 ; i < 5 ; i ++)
	{
		for(int j = 0 ; j < 5 ; j ++)
		{
			scanf("%d",&(Graph[i][j]));
		}
	}
	memset(vis,0,sizeof(vis));
	bfs();
	return 0;
}

 

【上篇】
【下篇】

抱歉!评论已关闭.