man
  • 板块灌水区
  • 楼主Vlexander
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/6/27 13:50
  • 上次更新2024/6/27 17:22:21
查看原帖
man
1069077
Vlexander楼主2024/6/27 13:50
#include <bits/stdc++.h>
#define mp make_pair
#define inf 1<<30
using namespace std;
queue<pair<pair<int,int>,int> > q;
int dx[8] = {1,1,2,2,-1,-1,-2,-2};
int dy[8] = {2,-2,1,-1,2,-2,1,-1};
int ma[1010][1010];
int n,m,x,y;
void bfs(){
	while(!q.empty()){
		int x = q.front().first.first;
		int y = q.front().first.second;
		int val = q.front().second;
		q.pop();
		for(int i = 0;i<8;i++){
			if(x+dx[i]<=n and x+dx[i]>0 and y+dy[i]<=m and dy[i]+y>0 and val+1<ma[x+dx[i]][y+dy[i]]){
				ma[x+dx[i]][y+dy[i]] = val+1;
				q.push(mp(mp(x+dx[i],y+dy[i]),val+1));
			}
		}
	}
}

int main(){
	for(int i = 1;i<=1000;i++){
		for(int j = 1;j<=1000;j++) ma[i][j] = inf;
	}
	scanf("%d%d%d%d",&n,&m,&x,&y);
	q.push(mp(mp(x,y),0));
	ma[x][y] = 0;
	bfs();
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			if(ma[i][j]!=(inf))printf("%-5d",ma[i][j]);
			else printf("%-5d",-1);
		}
		printf("\n");
	}
	return 0;
}
2024/6/27 13:50
加载中...