zoukankan      html  css  js  c++  java
  • A Knight's Journey POJ

    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
    DFS 字典序
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 30;
     8 bool a[maxn][maxn], flag;
     9 int c[] = { -1, 1, -2, 2, -2, 2, -1, 1 },
    10         d[] = { -2, -2, -1, -1, 1, 1, 2, 2 };//注意顺序
    11 int n, m, end;
    12 char b[60];
    13 
    14 bool ok(int x, int y) {
    15     return x >= 0 && x < n && y >= 0 && y < m;
    16 }
    17 
    18 void dfs(int x, int y, int TM, char *s) {
    19     if (flag)
    20         return;
    21     if (TM == end) {
    22         puts(s);
    23         flag = true;
    24         return;
    25     }
    26     for (int i = 0; i < 8; i++) {
    27         int xx = x + c[i], yy = y + d[i];
    28         if (ok(xx, yy) && !a[xx][yy]) {
    29             a[xx][yy] = true;
    30             b[TM] = yy + 'A';
    31             b[TM+1] = xx + '1';
    32             dfs(xx, yy, TM+2, s);
    33             a[xx][yy] = false;
    34         }
    35     }
    36 }
    37 
    38 int main() {
    39     int t;
    40     int cas=0;
    41     scanf("%d", &t);
    42     while (t--) {
    43         printf("Scenario #%d:
    ",++cas);
    44         scanf("%d%d", &n, &m);
    45         end = n * m * 2;
    46         flag = false;
    47         for (int j = 0; j < m; j++) {
    48             for (int i = 0; i < n; i++) {
    49                 memset(a, 0, sizeof(a));
    50                 memset(b, 0, sizeof(b));
    51                 b[0] = j + 'A';
    52                 b[1] = i + '1';
    53                 a[i][j]=true;
    54                 dfs(i, j, 2, b);
    55                 if (flag)
    56                     goto goubitimulangfeiwoyixiawushijain;
    57             }
    58 
    59         }
    60         goubitimulangfeiwoyixiawushijain: if (!flag)
    61             puts("impossible");
    62         puts("");
    63     }
    64 }
    View Code
  • 相关阅读:
    Ubuntu下设置静态网址
    Ubuntu下qemu环境搭建vexpress开发平台
    Ubuntu管理员密码设置
    学习MFC创建界面
    opencv3.0之后IPLimage转换成MAT的问题
    C++的ofstream与ifstream使用
    PCA主成分分析
    pycharm但多行注释快捷键
    fiddler不同代理模式的区别
    Python 常用模块大全(整理)
  • 原文地址:https://www.cnblogs.com/dulute/p/7272678.html
Copyright © 2011-2022 走看看