dfs90分求调
  • 板块P1443 马的遍历
  • 楼主laohu
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/2/5 16:38
  • 上次更新2025/2/5 20:14:04
查看原帖
dfs90分求调
120203
laohu楼主2025/2/5 16:38

蒟蒻求救

#include<bits/stdc++.h>
using namespace std;
const int NR=405;
int n,m,x,y,cnt;
int line[8]={-2,-2,-1,1,2, 2, 1,-1};
int  row[8]={-1, 1, 2,2,1,-1,-2,-2};
int a[NR][NR];
bool flag[NR][NR];
void dfs(int x,int y){
	if(flag[x][y]){
		if(a[x][y]<=cnt || cnt>n*m){
			return;
		}
	}
	flag[x][y]=true;
	a[x][y]=cnt;
	for(int i=0;i<8;i++){
		cnt++;
		if(x+line[i]>=1 && x+line[i]<=n && y+row[i]>=1 && y+row[i]<=m){
			//printf("%d %d %d\n",x+line[i],y+row[i],cnt);
			dfs(x+line[i],y+row[i]);
		}
		cnt--;
	}
}
int main(){
	scanf("%d %d %d %d",&n,&m,&x,&y);
	dfs(x,y);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(flag[i][j]){
				printf("%d ",a[i][j]);
			}
			else{
				printf("-1 ");
			}
		}
		puts("");
	}
	return 0;
}

2025/2/5 16:38
加载中...