POJ2488 A Knight's Journey

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

Source

TUD Programming Contest 2005, Darmstadt, Germany

要求字典序最小,那么暴力枚举起点然后DFS就行。沿途存下路径,最后转化成字符输出。

 1 /**/
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 const int mxn=125;
 9 int vis[mxn][mxn];
10 bool flag;
11 int mx[9]={0,-2,-2,-1,-1,1,1,2,2},
12     my[9]={0,-1,1,-2,2,-2,2,-1,1};
13 int n,m;
14 int qx[mxn],qy[mxn];
15 void dfs(int x,int y,int cnt){
16     qx[cnt]=x;qy[cnt]=y;
17     vis[x][y]=1;
18     if(cnt==m*n){
19         flag=1;
20         return;
21     }
22     for(int i=1;i<=8;i++){
23         int nx=mx[i]+x;
24         int ny=my[i]+y;
25         if(nx<1 || nx>m || ny<1 || ny>n)continue;
26         if(vis[nx][ny])continue;
27         dfs(nx,ny,cnt+1);
28         if(flag)return;
29     }
30     vis[x][y]=0;
31     return;
32 }
33 int main(){
34     int T;
35     scanf("%d",&T);
36     int cas=0;
37     for(cas=1;cas<=T;cas++){
38         memset(vis,0,sizeof vis);
39         flag=0;
40         int i,j;
41         scanf("%d%d",&n,&m);
42         for(i=1;i<=m;i++){
43             if(flag)break;
44              for(j=1;j<=n;j++){
45                  dfs(i,j,1);
46                  if(flag)break;
47              }
48         }
49         printf("Scenario #%d:\n",cas);
50         if(flag){
51             for(i=1;i<=n*m;i++)printf("%c%d",qx[i]+‘A‘-1,qy[i]);
52         }
53         else printf("impossible");
54         printf("\n");
55         if(cas<T)printf("\n");
56     }
57     return 0;
58 }

POJ2488 A Knight's Journey

时间: 2024-12-03 01:27:20

POJ2488 A Knight's Journey的相关文章

POJ2488:A Knight&#39;s Journey(dfs)

http://poj.org/problem?id=2488 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 directi

POJ2488 A Knight&#39;s Journey 骑士巡游 DFS

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

快速切题 poj2488 A Knight&#39;s Journey

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31195   Accepted: 10668 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 ar

poj2488 A Knight&#39;s Journey裸dfs

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35868   Accepted: 12227 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 ar

poj-2488 a knight&#39;s journey(搜索题)

Time limit1000 ms Memory limit65536 kB 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 a

poj2488(A Knight&#39;s Journey)

题目地址:A Knight's Journey 题目大意: 骑士按照日字形走,给你p*q的棋盘,问你骑士能否走遍棋盘的所有位置,输出骑士走的路线序列p(1.2....)q(A.B...) 按照字典序输出,如果不能输出 'impossible' . 解题思路: 搜索.因为是遍历全图所有点,所以必然经过A1. 又因为按字典序,既然A1可以经过,所以必然可以从A1开始. 注意: 1.按照字典序输出意思为(先安A.B.C...)排序输出. const int dirx[]={-1,1,-2,2,-2,2

POJ2488A Knight&#39;s Journey[DFS]

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41936   Accepted: 14269 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 ar

A Knight&#39;s Journey(DFS)深搜

A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33634 Accepted: 11450 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

POJ2488A Knight&#39;s Journey(dfs+数学)

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32422   Accepted: 11040 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 ar