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

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

    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
    #include<stdio.h>
    #include<string.h>
    struct node
    {
         int x;
         int y;
    }pos[10000];
    
    int dir[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
    //貌似方向数组要这样写,题目要求按字典序输出
    int n,m,vis[40][40],flag;
    void  dfs(int x,int y,int num)
    {
         int i;
         vis[x][y]=1;
         if(num==n*m)
         {
              flag=1;
              return ;
         }
         if(flag)
         return ;
    
         for(i=0;i<8;i++)
         {
                     if(flag)
                   break;
              int xx=x+dir[i][0],yy=y+dir[i][1];
              if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy])
              {
                   vis[xx][yy]=1;
                   pos[num].x=xx;
                   pos[num].y=yy;
                   dfs(xx,yy,num+1);
                   vis[xx][yy]=0;
    
    
              }
         }
         return ;
    }
    int main()
    {
         int i,j,t,cas=1;
         //freopen("in.txt","r",stdin);
         //freopen("out.txt","w",stdout);
         scanf("%d",&t);
         while(t--)
         {
              flag=0;
              memset(vis,0,sizeof(vis));
               memset(pos,0,sizeof(pos));
              scanf("%d %d",&n,&m);
              pos[0].x=0;
              pos[0].y=0;
              dfs(0,0,1);//貌似枚举(0,0)就行了
              //for(i=0;i<n;i++)
                //for(j=0;j<m;j++)
                 // dfs(i,j,0);
                printf("Scenario #%d:
    ",cas++);
              if(flag)
              {
    
                   for(i=0;i<n*m;i++)
                   printf("%c%d",pos[i].y+'A',pos[i].x+1);
                   printf("
    ");
    
              }
               else
              printf("impossible
    ");
              printf("
    ");
    
         }
         return 0;
    }
  • 相关阅读:
    base64加密/解密
    js split 的用法和定义 js split分割字符串成数组的实例代码
    js获取html5 audio 音频时长方法
    获取虾米音乐的歌词
    ajax请求QQ音乐
    MarkdownPad2.5 注册码
    neovim 使用
    tmux的使用方法和个性化配置
    linux 安装libevent
    boost.sha1
  • 原文地址:https://www.cnblogs.com/llei1573/p/3231555.html
Copyright © 2011-2022 走看看