国际象棋
2016-04-13 15:39
239 查看
/* A Knight's Journey Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other Problem 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 题意:问在给的p*q的棋盘上,以象棋中马的行走方式,是否可以不重复的走完整个棋盘。 若可以则输出任意一种行走方式,注意要按照字典序的方式输出。不可以就输出“impossible”。*/ #include <stdio.h> #include<string.h> char map[60]; int book[27][27]; int flag; int n,m,w=0; int count; int dx[8]={-2,-2,-1,-1,1,1,2,2}; int dy[8]={-1,1,-2,2,-2,2,-1,1}; void dfs(int x,int y) { int i,j,k; int sx,sy; if(flag)return; if(count==n*m) { flag=1; for(i=0;i<count*2;i++) { printf("%c",map[i]); } printf("\n\n"); } if(x>=0&&y>=0&&x<n&&y<m&&!book[x][y]) { map[w]='A'+y;//y代表的行 map[w+1]='1'+x;//x代表的列 count++; w+=2; book[x][y]=1; for(k=0;k<8;k++) { sx=dx[k]+x; sy=dy[k]+y; dfs(sx,sy); } count--; book[x][y]=0; w-=2; } } int main() { int t,r=0; scanf("%d",&t); while(t--) { memset(book,0,sizeof(book)); scanf("%d%d",&n,&m); // n代表列 m代表行 flag=0; count=0; printf("Scenario #%d\n",++r); dfs(0,0); if(!flag) printf("impossible\n"); } return 0; }
相关文章推荐
- lua中的函数
- Linux系统中/dev/mtd与/dev/mtdblock的区别
- JS 异步纵向编程
- Kafka基本概念
- MD5加密操作
- 元素出栈、入栈顺序的合法性
- Linux下Shell编程实现基于Hadoop的ETL(导入篇)
- Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径
- Mysql海量数据--导入导出、备份恢复方法
- ArcGIS Runtime SDK for iOS(一) – 实现地图的不同点的callout展示
- 一个人的旅行
- eclipse配置jdk源码
- 根据二叉树的先序和中序序列画出二叉树的方法
- iOS开发-进阶:iOS调用WebService
- shell脚本,在不同目录下新建同名文件,并添加内容
- 测试DML语言
- zzuli 1728: 社交网络(求期望值)
- android 纯粹自定义控件 滑动开关
- HDU 1712 ACboy needs your help(简单01背包)
- 出于学习的目的,写了个桌面右键菜单