BFS之:迷宫问题

在这里插入图片描述

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int a[4] = {
    
     -1,1,0,0 };
int b[4] = {
    
     0,0,-1,1 };//记录坐标上下左右变化 
struct Point
{
    
    
	int x, y;//坐标位置 
	int parent;//父结点位置 
	Point(int a, int b, int c) :x(a), y(b), parent(c)
	{
    
    }
};
int main()
{
    
    
	int array[5][5];
	int visite[5][5];//标记是否被访问 
	memset(visite, 0, sizeof(visite));
	int i, j;
	for (i = 0; i < 5; i++)
		for (j = 0; j < 5; j++)
			cin >> array[i][j];
	vector<Point> que;//用数组模仿队列
	vector<Point> result;//存储最终路径 
	que.push_back(Point(0, 0, -1));//起始点的父结点为-1
	visite[0][0] = 1;
	int number = 0;//记录当前搜索为数组的第几个元素 
	while (1)
	{
    
    
		Point p = que[number];
		if (p.x == 4 && p.y == 4)//找到最后一个结点 
		{
    
    
			while (p.parent != -1)
			{
    
    
				result.push_back(p);
				p = que[p.parent];
			}
			result.push_back(Point(0, 0, -1));
			break;
		}
		else
		{
    
    
			for (i = 0; i < 4; i++)
			{
    
    
				if (p.x + a[i] <= 4 && p.x + a[i] >= 0 && p.y + b[i] <= 4 && p.y + b[i] >= 0 && visite[p.x + a[i]][p.y + b[i]] == 0 && array[p.x + a[i]][p.y + b[i]] == 0)//将符合条件的坐标入队列 
				{
    
    
					visite[p.x + a[i]][p.y + b[i]] = 1;
					que.push_back(Point(p.x + a[i], p.y + b[i], number));
				}
			}
		}
		number++;
	}
	for (i = result.size() - 1; i >= 0; i--)
		cout << "(" << result[i].x << ", " << result[i].y << ")" << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wuyvle/article/details/113615446