poj 3752(水题,类似3083)

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int data[105][105],count,m,n;
bool dfs(int direction,int i,int j){    //definition是方向,
                                        //1向东,2向南,3向西,4向北 
    if(data[i][j]==0)data[i][j] = ++count;
    else return false;
    if(count==m*n)return true;
    if(direction==1){
        if(dfs(1,i,j+1))
            return true;
        if(dfs(2,i+1,j))
            return true;
    }
    if(direction==2){
        if(dfs(2,i+1,j))
            return true;
        if(dfs(3,i,j-1))
            return true;
    }
    if(direction==3){
        if(dfs(3,i,j-1))
            return true;
        if(dfs(4,i-1,j))
            return true;
    }
    if(direction==4){
        if(dfs(4,i-1,j))
            return true;
        if(dfs(1,i,j+1))
            return true;
    }
    return false;
}
int main(){
    scanf("%d%d",&m,&n);
    memset(data,0,sizeof data);
    data[1][n+1] = -1;
    data[m+1][n] = -1;
    data[m][0] = -1;
    count = 0;
    dfs(1,1,1);
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            printf("   %c",(data[i][j]-1)%26+'A');
        }
        printf("\n");
    }
    return 0;
}

 

posted @ 2021-08-14 00:01  智人心  阅读(26)  评论(0)    收藏  举报