全爆0
查看原帖
全爆0
307518
zhengzhuo1106楼主2024/5/15 19:30
#include<bits/stdc++.h>
using namespace std;
const int N=1e4;
int n[N][N],a,b,x,y;
void bfs(int a,int b){
	if(n[a-1][b-2]&&a>=1&&b>=2){
		if(n[a-1][b-2]==0){
			n[a-1][b-2]=n[a][b]+1;
		}
		if(n[a-1][b-2]!=0){
			n[a-1][b-2]=min(n[a-1][b-2],n[a][b]+1);
		}
		bfs(a-1,b-2);
	}
	if(n[a-2][b-1]&&a>=2&&b>=1){
		if(n[a-2][b-1]==0){
			n[a-2][b-1]=n[a][b]+1;
		}
		if(n[a-2][b-1]!=0){
			n[a-2][b-1]=min(n[a-2][b-1],n[a][b]+1);
		}
		bfs(a-2,b-1);
	}
	if(n[a-2][b+1]&&a>=2&&b<y-1){
		if(n[a-2][b+1]==0){
			n[a-2][b+1]=n[a][b]+1;
		}
		if(n[a-2][b+1]!=0){
			n[a-2][b+1]=min(n[a-2][b+1],n[a][b]+1);
		}
		bfs(a-2,b+1);
	}
	if(n[a-1][b+2]&&a>=1&&b<y-2){
		if(n[a-1][b+2]==0){
			n[a-1][b+2]=n[a][b]+1;
		}
		if(n[a-1][b+2]!=0){
			n[a-1][b+2]=min(n[a-1][b+2],n[a][b]+1);
		}
		bfs(a-1,b+2);
	}
	if(n[a+1][b-2]&&a<x-1&&b>=2){
		if(n[a+1][b-2]==0){
			n[a+1][b-2]=n[a][b]+1;
		}
		if(n[a+1][b-2]!=0){
			n[a+1][b-2]=min(n[a+1][b-2],n[a][b]+1);
		}
		bfs(a+1,b-2);
	}
	if(n[a+2][b-1]&&a<x-2&&b>=1){
		if(n[a+2][b-1]==0){
			n[a+2][b-1]=n[a][b]+1;
		}
		if(n[a+2][b-1]!=0){
			n[a+2][b-1]=min(n[a+2][b-1],n[a][b]+1);
		}
		bfs(a+2,b-1);
	}
	if(n[a+2][b+1]&&a<x-2&&b<y-1){
		if(n[a+2][b+1]==0){
			n[a+2][b+1]=n[a][b]+1;
		}
		if(n[a+2][b+1]!=0){
			n[a+2][b+1]=min(n[a+2][b+1],n[a][b]+1);
		}
		bfs(a+2,b+1);
	}
	if(n[a+1][b+2]&&a<x-1&&b<y-2){
		if(n[a+1][b+2]==0){
			n[a+1][b+2]=n[a][b]+1;
		}
		if(n[a+1][b+2]!=0){
			n[a+1][b+2]=min(n[a+1][b+2],n[a][b]+1);
		}
		bfs(a+1,b+2);
	}
	return ;
}
int main(){
	cin>>x>>y>>a>>b;
	a--;
	b--;
	bfs(a,b);
	for(int i=0;i<x;i++){
		for(int j=0;j<y;j++){
			if(n[i][j]==0){
				printf("%-5d",-1);
			}
			else printf("%-5d",n[i][j]);
		}
		cout<<endl;
	}
	
	return 0;
}
2024/5/15 19:30
加载中...