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

    A Knight's Journey
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 44532   Accepted: 15139

    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

    分析:
    朝8个方向进行的DFS搜索,主要的是要记录 路径,考虑到深搜的性质,故采用结构体,最后一次更新完成的路径即使最终的路径
    这个表示位置的坐标的时候还有字母,字母表示位置是相当不方便的。所以先都采用数字 ,输出的时候再化为字母。

    代码如下
    #include <cstdio>
    #include <iostream>
    #include  <cstring >
    using namespace std;
    #define INF 0x7fffffff
    typedef long long ll;
    int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};
    int  p,q;
    int map1[100][100];
    int f,step;
    int vis[100][100];
    int check(int x,int y)
    {
      if(x>=0&&x<p&&y>=0&&y<q&&!vis[x][y])
      return 1;
      return 0;
    }
    struct node
    {
        int x;
        int y;
    }path[1000];
    void dfs(int x,int y)
    {
        if(f==1)
        return ;
        path[step].x=x;
        path[step].y=y;
        if(step==p*q-1)
        {
          f=1;
        }
        int next_x;
        int next_y;
        for(int i=0;i<8;i++)
        {
            next_x=path[step].x+dir[i][1];
            next_y=path[step].y+dir[i][0];
            if(check(next_x,next_y))
            {
                vis[next_x][next_y]=1;
                step++;
                dfs(next_x,next_y);
                    step--;
                 vis[next_x][next_y]=0;
            }
        }
    }
    int main()
    {
        int t;
        cin>>t;
        for(int k=1;k<=t;k++)
        {
            f=0;
            step=0;
            memset(map1,0,sizeof(map1));
          cin>>p>>q;
        {
          std::ios::sync_with_stdio(false);
           
         }
         dfs(0,0);
         vis[0][0]=1;
         printf("Scenario #%d:
    ",k);
         if(f==0)cout<<"impossible";
         else 
         {
             for(int i=0;i<p*q;i++)
             {
                 printf("%c",'A'+path[i].y);
                 printf("%d",path[i].x+1);
             }
         }
         cout<<endl;
         cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/a249189046/p/6642438.html
Copyright © 2011-2022 走看看