40pts qz
查看原帖
40pts qz
764672
ZJLmath楼主2023/4/1 16:21
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
int ans[405][405];
bool vis[405][405];
const int dx[]={1,2,1,2,-1,-2,-1,-2};
const int dy[]={2,1,-2,-1,2,1,-2,-1};
bool is_in(int x,int y){
	return x>=1&&x<=n&&y>=1&&y<=m;
}
void dfs(int x,int y,int step){
//	if(ans[x][y]!=-1&&step>=ans[x][y])return ;
	if(ans[x][y]!=-1&&x!=1&&y!=1){
		if(step>=ans[x][y]){
			return;
		}
	}
	if(vis[x][y])return;
	vis[x][y]=1;
	if(ans[x][y]==-1)ans[x][y]=step;
	else ans[x][y]=min(step,ans[x][y]);
	for(int i=0;i<8;++i){
		int xx=x+dx[i];
		int yy=y+dy[i];
		
		if(is_in(xx,yy)){
	//		cout<<xx<<' '<<yy<<endl;
		//	vis[xx][yy]=1;
			dfs(xx,yy,step+1);
		//	vis[xx][yy]=0;
		}
	}
	vis[x][y]=0;
}
int main(){
	memset(vis,0,sizeof(vis));
	memset(ans,-1,sizeof(ans));
	cin>>n>>m>>x>>y;
	ans[x][y]=0;
	dfs(x,y,0);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			printf("%-5d",ans[i][j]);
		}
		cout<<endl;
	}
	return 0;
}
2023/4/1 16:21
加载中...