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 
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 实际用时 20min
情况:CCCCA 注意java和胡乱改动
注意点:1 组间空行但最后一组没有 2 字典序
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
typedef unsigned long long ull;
bool used[8][8];
char heap[64][3];
const int dx[8]={-2,-2,-1,-1,1,1,2,2},dy[8]={-1,1,-2,2,-2,2,-1,1};
bool judge(int x,int y){
if(x>=0&&x<n&&y>=0&&y<m)return true;
return false;
}
bool dfs(int x,int y,int cnt){
used[x][y]=true;
heap[cnt][0]=x+'A';
heap[cnt++][1]=y+'1';
if(cnt==n*m)return true;
for(int i=0;i<8;i++){
int tx=x+dx[i],ty=y+dy[i];
if(judge(tx,ty)&&!used[tx][ty]){
if(dfs(tx,ty,cnt))return true;
}
}
used[x][y]=false;
return false;
}
int main(){
int T;scanf("%d",&T);
for(int ti=1;ti<=T;ti++){
scanf("%d%d",&m,&n);
memset(used,0,sizeof(used));
bool fl=dfs(0,0,0);
printf("Scenario #%d:\n",ti);
if(fl){
for(int i=0;i<n*m;i++){
printf("%s",heap[i]);
}
puts("");
}
else {
puts("impossible");
}
if(ti<T)puts("");
}
return 0;
}

  

最新文章

  1. jquery 设置焦点
  2. 配置spring事务管理的几种方式(声明式事务)
  3. [转] - C++程序启动过程
  4. SQL Server 2008 的gis函数
  5. stack例子
  6. 利用column-width属性设置多栏布局
  7. asp.net 字符帮助类 类型转换类
  8. hibernate得知——Set设置配置
  9. CSS3秘笈复习:第一章&amp;第二章&amp;第三章
  10. 用python实现对图像的卷积(滤波)
  11. 石头剪刀布 R语言统计分析
  12. EF错误
  13. DJango_生命周期
  14. NDK 开发中,各种指令集的坑,arm64
  15. 数据库 --&gt; sqlite3总结
  16. Spring Boot + Jersey发生FileNotFoundException (No such file or directory)
  17. JS特效实现微博评论逻辑
  18. 关于iscroll插件的使用
  19. pdo连接的时候设置字符编码是这样的
  20. jsp fmt标签格式化double数字

热门文章

  1. Cocos 开发笔记
  2. Socket:读写处理及连接断开的检测
  3. VC++实现获取文件占用空间大小的两种方法(非文件大小)
  4. 《js高级程序设计》--第三章数据类型
  5. ubuntu16.04下编译ceres-solver
  6. IntelliJ IDEA 在运行web项目时部署的位置
  7. Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
  8. 圆点博士 陀螺仪和加速度计MPU6050的单位换算方法
  9. UVa 10618 跳舞机
  10. python 时间元组转可视化时间(自定义)