/*
5 4
1 1 2 1
1 1 1 1
1 1 2 1
1 2 1 1
1 1 1 2
1 1 4 3
*/
#include<bits/stdc++.h>
using namespace std;
int a[101][101],v[101][101];
struct point
{
int x;
int y;
int step;
};
queue<point> r;//申请队列
int dx[4] = {0, 1, 0, -1};//右,下,左,上
int dy[4] = {1, 0, -1, 0};
int main()
{
int n, m, startx, starty, p, q;
cin >> n >> m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin >> a[i][j];
cin >> startx >> starty >> p >> q;
//BFS
point start;
start.x = startx;
start.y = starty;
start.step = 0;
r.push(start);//起点入队
v[startx][starty] = 1;
while(!r.empty())
{
int x = r.front().x, y = r.front().y;
if(x == p && y == q)
{
cout << r.front().step;
break;
}
for(int k = 0;k <= 3;k ++)
{
int tx, ty;
tx = x + dx[k];
ty = y + dy[k];
if(a[tx][ty] == 1 && v[tx][ty] == 0)
{
point temp;
temp.x = tx;
temp.y = ty;
temp.step = r.front().step + 1;
r.push(temp);
v[tx][ty] = 1;
}
}
r.pop();//拓展完队首元素出队
}
system("pause");
}
BFS广搜迷宫问题
最新推荐文章于 2024-09-04 18:39:13 发布