zoukankan      html  css  js  c++  java
  • POJ 2488 A Knight's Journey (DFS)

    A Knight's Journey

    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 30656   Accepted: 10498

    Description

    Background 
    The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey 
    around the world. Whenever a knight moves, it is two squares in one direction and one square perpendicular to this. The world of a knight is the chessboard he is living on. Our knight lives on a chessboard that has a smaller area than a regular 8 * 8 board, but it is still rectangular. Can you help this adventurous knight to make travel plans? 

    Problem 
    Find a path such that the knight visits every square once. The knight can start and end on any square of the board.

    Input

    The input begins with a positive integer n in the first line. The following lines contain n test cases. Each test case consists of a single line with two positive integers p and q, such that 1 <= p * q <= 26. This represents a p * q chessboard, where p describes how many different square numbers 1, . . . , p exist, q describes how many different square letters exist. These are the first q letters of the Latin alphabet: A, . . .

    Output

    The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Then print a single line containing the lexicographically first path that visits all squares of the chessboard with knight moves followed by an empty line. The path should be given on a single line by concatenating the names of the visited squares. Each square name consists of a capital letter followed by a number. 
    If no such path exist, you should output impossible on a single line.

    Sample Input

    3
    1 1
    2 3
    4 3

    Sample Output

    Scenario #1:
    A1
    
    Scenario #2:
    impossible
    
    Scenario #3:
    A1B3C1A2B4C2A3B1C3A4B2C4
    

    Source

    TUD Programming Contest 2005, Darmstadt, Germany
     
    题目思路很清晰就是说如果能遍历整个图则打印路径,如果不行,则输出impossible
    这道题按照字典序去搜索,想清楚行列关系再写,不然会WA
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 using namespace std;
     6 const int MAXN=200+10;
     7 const int INF=0x3f3f3f3f;
     8 int n,m,flag;
     9 int vis[MAXN][MAXN],vx[MAXN],vy[MAXN];
    10 int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};//字典序
    11 void DFS(int x,int y,int sum)
    12 {
    13     vx[sum]=x;//列,字母
    14     vy[sum]=y;//行,数字
    15     if(sum==n*m)
    16     {
    17         flag=1;
    18         return ;
    19     }
    20     for(int i=0;i<8;i++)
    21     {
    22         int xx=x+dir[i][0];
    23         int yy=y+dir[i][1];
    24         if((1<=xx&&xx<=m)&&(1<=yy&&yy<=n)&&!vis[xx][yy]&&!flag)
    25         {
    26             vis[xx][yy]=1;
    27             DFS(xx,yy,sum+1);
    28             vis[xx][yy]=0;
    29         }
    30     }
    31 }
    32 int main()
    33 {
    34     //freopen("in.txt","r",stdin);
    35     int kase,cnt=0;
    36     scanf("%d",&kase);
    37     while(kase--)
    38     {
    39         flag=0;
    40         scanf("%d %d",&n,&m);
    41         memset(vis,0,sizeof(vis));
    42         memset(vx,0,sizeof(vx));
    43         memset(vy,0,sizeof(vy));
    44         vis[1][1]=1;
    45         DFS(1,1,1);
    46         printf("Scenario #%d:
    ",++cnt);
    47         if(flag)
    48         {
    49             for(int i=1;i<=n*m;i++)
    50                 printf("%c%d",'A'+vx[i]-1,vy[i]);
    51             printf("
    ");
    52         }
    53         else
    54             printf("impossible
    ");
    55         printf("
    ");
    56 
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    创建应用程序菜单与菜单融合 
    FastReport 内置函数的用法与注意
    Visual Basic 2005 中的程式語言加強功能
    写作关键用词及短语汇总
    序列化FastReport
    Only Time(惟有时光)
    bcd
    【分享】微软产品全部序列号,盖茨会哭的~~~
    TADOQuery parameter对象被不正确地定义。提供了不一致或不完整的信息
    两相四线步进电机驱动代码
  • 原文地址:https://www.cnblogs.com/clliff/p/3911359.html
Copyright © 2011-2022 走看看