poj2488

来源:互联网 发布:淘宝运营要会什么 编辑:程序博客网 时间:2024/05/21 17:47

https://vjudge.net/problem/15199/origin
超经典深搜题,需要注意的是搜索的顺序
上代码:

#include<iostream>#include<cstdio>#include<cstring>#include<string>int n1,n2;int vis[30][30],flag,num,xx[30],yy[30];int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};using namespace std;void dfs(int x,int y,int num){    //cout<<x<<" "<<y;    xx[num]=x;    yy[num]=y;    if(num==n1*n2){        flag=1;        return;    }    int xxx,yyy;    for(int i=0;i<8;i++){        xxx=x+dir[i][0];        yyy=y+dir[i][1];        if(xxx<1||xxx>n1||yyy<1||yyy>n2)        continue;        if(!flag&&!vis[xxx][yyy]){            vis[xxx][yyy]=1;            dfs(xxx,yyy,num+1);            vis[xxx][yyy]=0;        }    }}int main(){    int n;    while(cin>>n){        int r=n;        while(n--){            memset(vis,0,sizeof(0));            cin>>n2>>n1;            flag=0;            num=0;            vis[1][1]=1;            dfs(1,1,1);            //cout<<xx[1]-'A'+1<<" "<<yy[1]<<endl;            printf("Scenario #%d:\n",r-n);            if(flag){                for(int i=1;i<=n1*n2;i++){                    printf("%c%d",xx[i]+'A'-1,yy[i]);                }            }            else printf("impossible");            printf(n==0?"\n":"\n\n");        }    }    return 0;}
0 0
原创粉丝点击