代码:
#include<bits/stdc++.h>
using namespace std;
int a[100][100],v[100][100];// a为地图,v为记录是否访问
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;// 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;
point start;
start.x = startx;
start.y = starty;
start.step = 0;// 建立初始点
r.push(start);// 入队
v[startx][starty] = 1;// 设置该点为已访问
int flag = 0;// 判断是否有解
while(!r.empty()){// 如果队列不为空
int x=r.front().x,y = r.front().y;// 队首节点
if(x==p && y==q){
flag = 1;
cout<<r.front().step;
break;
}
for(int k=0;k<=3;k++){// 遍历4个方向
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();// 出队
}
if(flag == 0){
cout<<"no answer!"<<endl;
}
return 0;
}
//测试样例: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
标签:优先,temp,tx,ty,int,BFS,start,step,广度 From: https://www.cnblogs.com/bzlx1717/p/17413109.html