#include<bits/stdc++.h>
using namespace std;
bool chess[105][105];
int head=0,tail=0,q[150005][3];
int wx[12]={-2,-1,+1,+2,+2,+1,-1,-2,-2,+2,+2,-2};
int wy[12]={+1,+2,+2,+1,-1,-2,-2,-1,+2,+2,-2,-2};
void bfs(int sx,int sy){
tail++;
q[tail][0]=sx;
q[tail][1]=sy;
while(head<tail){
head++;
int x=q[head][0];
int y=q[head][1];
int step=q[head][2];
for(int i=0;i<12;i++){
int nx=x+wx[i],ny=y+wy[i];
if(chess[nx][ny]==1){
tail++;
q[tail][0]=nx;
q[tail][1]=ny;
q[tail][2]=step+1;
chess[nx][ny]=0;
if(nx==1&&ny==1)
return;
}
}
}
}
int main(){
int stepA,stepB;
q[tail][2]=0;
int ax,ay,bx,by;
cin>>ax>>ay>>bx>>by;
memset(chess,0,sizeof(chess));
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
chess[i][j]=1;
bfs(ax,ay);
stepA=q[tail][2];
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
chess[i][j]=1;
head=0,tail=0;
memset(q,0,sizeof(q));
bfs(bx,by);
stepB=q[tail][2];
cout<<stepA<<endl;
cout<<stepB;
return 0;
}
信息奥赛一本通 - 1330:【例8.3】最少步数
最新推荐文章于 2025-03-21 07:57:47 发布
本文介绍了一个使用C++编写的函数bfs,用于在100x100的棋盘上计算两个已知坐标点之间的最短路径步数,通过深度优先搜索算法实现。



300

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



