深度优先模板(POJ2488)

来源:互联网 发布:淘宝怎么办信用卡 编辑:程序博客网 时间:2024/05/22 09:47
#include <cstdio>#include <cstring>int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};int flag[100][100],cnt,m,n;struct node{char letter;int num;}arr[1000];void dfs(int a,int b,int cur){/*赋值*/arr[cur].letter='A'+a-1;arr[cur].num=b;flag[a][b]=1;/*判断结束条件*/ if(cur==m*n) {cnt=cur;return;}for(int i=0;i<8;i++){int temp1=a+dir[i][0];int temp2=b+dir[i][1];/*判断边界与访问标记*/ if(temp1>0 && temp1<=n)    if(temp2>0 && temp2<=m)    if(!flag[temp1][temp2])    {    dfs(temp1,temp2,cur+1);    /*搜索完毕,快速退出*/ if(cnt==m*n)    return;    }}/*回溯*/ flag[a][b]=0;}int main(){freopen("input.txt","r",stdin);int T,T0;scanf("%d",&T);T0=T;while(T--){scanf("%d%d",&m,&n);memset(flag,0,sizeof(flag));cnt=0;dfs(1,1,1);printf("Scenario #%d:\n",T0-T);if(cnt<m*n) printf("impossible\n");else{for(int i=1;i<=m*n;i++)    printf("%c%d",arr[i].letter,arr[i].num);printf("\n");}printf("\n");}return 0;}

原创粉丝点击