#include<iostream>
using namespace std;
#define QSize 50
int a[5][5];
int dis[4][2]={ {-1,0},{1,0},{0,-1},{0,1} };
struct Node
{
int x, y, pre;
}queue[QSize];
int front = 0;
int rear = 0;
int visit[5][5];
void bfs(int beginX, int beginY, int endX, int endY)
{
queue[0].x = beginX, queue[0].y = beginY, queue[0].pre = -1;
rear = rear + 1;
visit[beginX][beginY] = 1;
while (front<rear)
{
for (int i = 0; i < 4; i++)
{
int newx = queue[front].x + dis[i][0];
int newy = queue[front].y + dis[i][1];
if (newx < 0 || newx>5 || newy < 0 || newy>5 || a[newx][newy] == 1 || visit[newx][newy] == 1)
continue;
queue[rear].x = newx;
queue[rear].y = newy;
queue[rear].pre = front;
rear++;
visit[newx][newy] = 1;
if (newx == endX && newy == endY)
{
return;
}
}
front++;
}
}
void print(Node now)
{
if (now.pre == -1)
cout << "(" << now.x << ", " << now.y << ")" << endl;
else
{
print(queue[now.pre]);
cout << "(" << now.x << ", " << now.y << ")" << endl;
}
}
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cin >> a[i][j];
}
}
bfs(0, 0, 4, 4);
print(queue[rear - 1]);
//system("pause");
return 0;
}poj[3984]
最新推荐文章于 2020-06-23 17:08:04 发布
本文介绍了一个使用广度优先搜索(BFS)算法在二维网格中寻找从起点到终点最短路径的C++程序实例。通过定义节点结构体和使用队列来遍历网格,确保了找到的路径是最短的。程序还包括读取网格输入和打印路径的功能。
308

被折叠的 条评论
为什么被折叠?



