zoukankan      html  css  js  c++  java
  • POJ--2488

    原题链接:http://poj.org/problem?id=2488

    分析:如果存在合法路径,那么一定可以将路径的起始点定为(A,1),从该点按字典序DFS,如果找到一条路径,那么这条路即为所求。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 #define maxn 27
     6 using namespace std;
     7 int dirx[8]={-2,-2,-1,-1,1,1,2,2};
     8 int diry[8]={-1,1,-2,2,-2,2,-1,1};
     9 char path[maxn<<1];
    10 int p,q,tot;
    11 bool visit[maxn][maxn],flag;
    12 void print()
    13 {
    14     for(int i=0;i<2*tot;i++)
    15     printf("%c",path[i]);
    16     printf("
    ");
    17 }
    18 void dfs(int num,int x,int y)
    19 {
    20     if(num==tot){
    21         print();
    22         flag=true;
    23         return;
    24     }
    25     for(int i=0;i<8&&!flag;i++){
    26         int nx=x+dirx[i];
    27         int ny=y+diry[i];
    28         if(nx>0&&ny>0&&nx<=q&&ny<=p&&!visit[nx][ny]){
    29             visit[nx][ny]=true;
    30             path[num<<1]=nx+'A'-1;
    31             path[num<<1|1]=ny+'1'-1;
    32             dfs(num+1,nx,ny);
    33             visit[nx][ny]=false;
    34         }
    35     }
    36 }
    37 int main()
    38 {
    39     int T,cas=1;
    40     scanf("%d",&T);
    41     while(T--)
    42     {
    43         scanf("%d%d",&p,&q);
    44         memset(visit,false,sizeof(visit));
    45         tot=p*q;flag=false;
    46         path[0]='A';path[1]='1';
    47         printf("Scenario #%d:
    ",cas++);
    48         visit[1][1]=true;
    49         dfs(1,1,1);
    50           if(!flag)printf("impossible
    ");
    51           if(T)puts("");
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    第五天站立会议记录
    第四天站立会议
    第三天站立会议
    第二天站立会议
    冲刺会议第三天
    冲刺会议第二天
    团队建议总结
    第二次冲刺第一天
    项目总结(09)
    第七天站立会议
  • 原文地址:https://www.cnblogs.com/i-love-acm/p/3248932.html
Copyright © 2011-2022 走看看