码迷,mamicode.com
首页 > 其他好文 > 详细

poj2488 bfs

时间:2016-09-29 00:47:15      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

http://poj.org/problem?id=2488

A Knight‘s Journey

Time Limit: 1000MS

 

Memory Limit: 65536K

Total Submissions: 41951

 

Accepted: 14274

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

技术分享
 
记录路径。
 
AC代码:
#include<cstdio>
#include<cstring>
using namespace std;

int T,p,q;
int To[8][2]= {{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int trp[900][2],visit[30][30];

int dfs(int ed,int be,int x,int y)
{
    if(be==ed)return 1;
    for(int i=0; i<8; i++)
    {
        int xx=x+To[i][0];
        int yy=y+To[i][1];
        if(xx>=0 && xx<q && yy>=0 && yy<p && !visit[xx][yy])
        {
            visit[xx][yy]=1;
            if(dfs(ed,be+1,xx,yy))
            {
                trp[be][0]=xx;
                trp[be][1]=yy;
                return 1;
            }
            visit[xx][yy]=0;
        }
    }
    return 0;
}

int main()
{
    int k=0;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&p,&q);
        memset(visit,0,sizeof(visit));
        trp[0][0]=0;
        trp[0][1]=0;
        visit[0][0]=1;
        printf("Scenario #%d:\n",++k);
        if(dfs(p*q,1,0,0))
        {
            for(int i=0; i<p*q; i++)
                printf("%c%d",trp[i][0]+A,trp[i][1]+1);
        }
        else
            printf("impossible");
        printf("\n");
        if(T!=0)printf("\n");
    }
    return 0;
}

 

 

poj2488 bfs

标签:

原文地址:http://www.cnblogs.com/a-clown/p/5918091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!