POJ 2488 A Knight's Journey

来源:互联网 发布:钓炸天盗号软件app 编辑:程序博客网 时间:2024/06/09 17:17
A Knight's Journey
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 40609 Accepted: 13800

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

31 12 34 3

Sample Output

Scenario #1:A1Scenario #2:impossibleScenario #3:

A1B3C1A2B4C2A3B1C3A4B2C4

这个样例我真服了,把行列和横纵坐标弄反之后还是一样,在这么一个脑残的bug上卡了好久。。。

#include<stdio.h>#include<string.h>int xx[8] = {-1, 1, -2, 2, -2, 2, -1, 1};int yy[8] = {-2, -2, -1, -1, 1, 1, 2, 2};int vis[110][110];int n,m,flag;struct node{    int x;    int y;}dian[66666];void dfs(int X,int Y,int ss){    dian[ss].x=X;    dian[ss].y=Y;    if(ss==n*m)    {        flag=1;        return ;    }    for(int i=0;i<8;i++)    {        int nx=X+xx[i];        int ny=Y+yy[i];        if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!vis[nx][ny]&&!flag)        {            vis[nx][ny]=1;            dfs(nx,ny,ss+1);            vis[nx][ny]=0;        }    }}int main(){    int t;    scanf("%d",&t);    for(int ii=1;ii<=t;ii++)    {        flag=0;        scanf("%d%d",&n,&m);        memset(vis,0,sizeof(vis));        vis[1][1]=1;        dfs(1,1,1);        printf("Scenario #%d:\n",ii);        if(flag)        {            for(int i=1;i<=m*n;i++) printf("%c%d",dian[i].y+'A'-1,dian[i].x);            printf("\n");        }        else printf("impossible\n");        if(ii!=t) printf("\n");    }    return 0;}


0 0
原创粉丝点击