注释
2024-07-25 18:53:52
发布于:浙江
11阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int dis[405][405];
int n,m,x,y;
int dx[8]={1,1,-1,-1,2,2,-2,-2};//位置数组
int dy[8]={-2,2,2,-2,1,-1,1,-1};
bool check(int x,int y){
//判断是否出棋盘、x,y有无去过
if(x<=0 || x>n || y<=0 ||y>m) return false;
if(dis[x][y]!=-1) return false;
return true;
}
struct stu{
//定义结构体(位置)
int x,y;
};
int main(){
cin>>n>>m>>x>>y;
//输入亿点东西
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dis[i][j]=-1;
//将dis的每一个位置初始化成-1
}
}
//可爱的bfs
//定义队列 q
queue<stu> q;
//将起始点x,y塞进队列
q.push({x,y});
//将dis的x,y变成了0(与原点相同所以为0)
dis[x][y]=0;
//只要队列非空
while(!q.empty()){
//定义队首
stu now=q.front();
//弹出队首
q.pop();
//遍历当前马能去到的所有点
for(int i=0;i<8;i++){
//下一个马的位置
int nxt_x=now.x+dx[i];
int nxt_y=now.y+dy[i];
//check一下
if(check(nxt_x,nxt_y)){
//check成功,将下一个点塞进队列
q.push({nxt_x,nxt_y});
//计算步数
dis[nxt_x][nxt_y]=dis[now.x][now.y]+1;
}
}
}
//可爱输出
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<dis[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
这里空空如也
有帮助,赞一个