螺旋方阵-运行超时:在最后一个数字,掉入死循环

发布时间 2023-11-13 21:07:10作者: Kkkrran
#include <stdio.h>
#define MAX 13
// all index starts from 1 not 0
int a[MAX][MAX]={0};
// x->line ; y->column
// null right down left up
int dx[5]={-99,0,1,0,-1};
int dy[5]={-99,1,0,-1,0};
int n;
void init(){
    for(int j=1;j<=n;j++)
        a[0][j]=a[n+1][j]=-1;
    for(int i=1;i<=n;i++)
        a[i][0]=a[i][n+1]=-1;
}
void show(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)
            printf("%3d",a[i][j]);
        puts("");
    }
}
int main(){
    scanf("%d",&n);
    // initialize as -1 and 0
    init();
    int x=1,y=1,num=1;
    // direction changes
    for(int i=0;1;i++){
        int th=i%4+1;
        while(1){
            a[x][y]=num;
            if(a[x+dx[th]][y+dy[th]]!=0)
                break;
            //a[x][y]=num++; 错误
            num++;
            x+=dx[th];
            y+=dy[th];
        }
        // num>n*n 错误
        if(num>=n*n)
            break;
    }
    show();
    return 0;
}