题目:转移门
为了复习BFS做几道题吧,很基础的BFS和棋盘类的差不多,注意打标记即可,废话不多说直接上代码
代码:
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
int sx,sy;
int zx,zy;
struct ch{
int x;
int y;
int step;
}f[100005];
char aa[1005][1005];
int a[1005][1005];
int ok[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int sum=100000005;
void bfs(int p,int q){
int head;
int tail;
head=tail=1;
f[tail].x=sx;
f[tail].y=sy;
f[tail].step=0;
ok[sx][sy]=1;
int xx;
int yy;
while(head<=tail){
for(int i=0;i<=3;i++){
xx=f[head].x+dx[i];
yy=f[head].y+dy[i];
if(xx<=n&&yy<=n&&xx>=1&&yy>=1){
if(ok[xx][yy]==0){
tail++;
f[tail].x=xx;
f[tail].y=yy;
f[tail].step=f[head].step+1;
ok[xx][yy]=1;
if(xx==zx&&yy==zy)
sum=min(sum,f[tail].step);
}
}
}
head++;
}
return;
}
int main() {
scanf("%d\n",&n);
for (int i=1;i<=n;i++)
scanf ("%s\n",aa[i]+1);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
a[i][j]=aa[i][j]-'0';
cin>>sx>>sy;
cin>>zx>>zy;
bfs(sx,sy);
cout<<sum;
return 0;
}
啦啦啦啦熬夜爆肝啊
本文深入探讨了BFS(宽度优先搜索)算法的基本原理及其在解决棋盘类问题中的应用。通过具体实例,详细展示了如何使用BFS算法进行路径寻找,并提供了完整的代码实现,帮助读者理解并掌握BFS算法的运用。
172万+





