#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;
}
BFS之:迷宫问题
猜你喜欢
转载自blog.csdn.net/wuyvle/article/details/113615446
今日推荐
周排行