没学队列所以用的循环写的,最后不是时间超限,是答案错误,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;
}