1 条题解

  • 1
    @ 2024-8-29 17:46:37

    迭代版:

    #include <bits/stdc++.h>
    using namespace std;
    int a[15][15],n;
    int k=1,x,y;
    int main() {
    	scanf("%d",&n);
    	a[x][y]=k;
    	k++;
    	while(k<=n*n){
    		while(y+1<n && a[x][y+1]==0){
    			y+=1;
    			a[x][y]=k;
    			k++; 
    		}
    		while(x+1<n && a[x+1][y]==0){
    			x+=1;
    			a[x][y]=k;
    			k++; 
    		}
    		while(y-1>=0 && a[x][y-1]==0){
    			y-=1;
    			a[x][y]=k;
    			k++; 
    		}
    		while(x-1>=0 && a[x-1][y]==0){
    			x-=1;
    			a[x][y]=k;
    			k++; 
    		}
    	}
    	for(int i=0;i<n;i++){
    		for (int j=0;j<n;j++){
    			printf("%3d",a[i][j]); 
    		}
    		printf("\n");
    	}
    	return 0;
    }
    

    递归版:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4+10; 
    int n;
    int mp[N][N];
    void funcDFS(int x,int y,int now,char dir){
        if(mp[x-1][y]!=0 && mp[x+1][y]!=0 && mp[x][y-1]!=0 && mp[x][y+1]!=0){
            mp[x][y]=now;
            return ;
        }
        if(dir=='R' && x<=n && y<=n && mp[x][y]==0){
            if(y+2>n || mp[x][y+2]!=0){
                dir='D';
            }
            mp[x][y]=now;
            funcDFS(x,y+1,now+1,dir);
        }else if(dir=='D' && x<=n && y<=n && mp[x][y]==0){
            if(x+2>n || mp[x+2][y]!=0){
                dir='L';
            }
            mp[x][y]=now;
            funcDFS(x+1,y,now+1,dir);
        }else if(dir=='L' && x<=n && y<=n && mp[x][y]==0){
            if(1>y-2 || mp[x][y-2]!=0){
                dir='U';
            }
            mp[x][y]=now;
            funcDFS(x,y-1,now+1,dir);
        }else if(dir=='U' && x<=n && y<=n && mp[x][y]==0){
            if(1>x-2 || mp[x-2][y]!=0){
                dir='R';
            }
            mp[x][y]=now;
            funcDFS(x-1,y,now+1,dir);
        }
    }
    int main(){
        scanf("%d",&n);
        funcDFS(1,1,1,'R');
        int i=1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%3d",mp[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
    
    • 1

    信息

    ID
    740
    时间
    1000ms
    内存
    125MiB
    难度
    10
    标签
    (无)
    递交数
    2
    已通过
    2
    上传者