求助只过了两个 但是我找不到错误
查看原帖
求助只过了两个 但是我找不到错误
1640882
andsummer楼主2025/1/23 20:12

没学队列所以用的循环写的,最后不是时间超限,是答案错误,10个过了2个 请大佬帮帮忙

#include <stdio.h>
#define N 405
 
int rule(int x,int y,int n,int m,int ans[N][N]) {
	if(x>0&&x<=n&&y>0&&y<=m&&ans[x][y]==-1) return 1;
	return 0;
}
int main() {
	int n,m,i,j,x,y,ii,k=0,flag=1;
	scanf("%d %d %d %d",&n,&m,&x,&y);
	int ans[N][N];
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			ans[i][j]=-1;
		}
	}
	int dx[8]= {-2,-1,1,2,2,1,-1,-2},dy[8]= {1,2,2,1,-1,-2,-2,-1};
	ans[x][y]=k;
	while(flag) {
		flag=0;
		for(i=1; i<=n; i++) {
			for(j=1; j<=n; j++) {
				if(ans[i][j]==k) {
					for(ii=0;ii<8; ii++) {
						if(rule(i+dx[ii],j+dy[ii],n,m,ans)) {
							ans[i+dx[ii]][j+dy[ii]]=k+1;
							flag=1;
						}
					}
				}
			}
		}
		k++;
	}
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) {
			printf("%-5d",ans[i][j]);
		}
		printf("\n");
	}
	return 0;
}

2025/1/23 20:12
加载中...