不知道哪错了
查看原帖
不知道哪错了
786689
littleqwq楼主2023/7/12 10:11

代码:

#include<bits/stdc++.h>
using namespace std;
int dx[]={-1,-2,-2,-1,1,2,2,1};
int dy[]={-2,-1,1,2,-2,-1,1,2};
int n,m,A,B;
int vis[405][405];//标记,从起点到x,y的最小步数 
struct node{
	int x,y;
	int step;// 从起点到x,y的最少步数 
};
queue<node> que;
void bfs(int sx,int sy);// sx,sy:起点坐标 
int main(){
	memset(vis,-1,sizeof vis);//初始化为-1 
	cin >> n >> m >> A >> B;
	bfs(A,B);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<vis[i][j]<<' ';
		}
		cout<<'\n';
	} 
	return 0;
}
void bfs(int sx,int sy){
	//处理起点
	vis[sx][sy] = 1;
	que.push(node{sx,sy,0});//node tmp = {sx ,sy, 0}; que.push(tmp);
	//开始广搜,只要队列不为空,一直搜 
	while(que.size()!=0){
		node hd = que.front();
		que.pop();//取队头,丢队头 
		for(int i=0;i<8;i++){//遍历输出所有方向 
			int nx=hd.x+dx[i];
			int ny=hd.y+dy[i];
			int nstep=hd.step+1;//计算新点新步数 
			if(nx<0||ny<0||nx>n||ny>n||vis[nx][ny]!=-1){//判断新点不合法,出界 
				continue;
			} 
			vis[nx][ny]++;
		}
	} 
}
2023/7/12 10:11
加载中...