设为首页 加入收藏

TOP

POJ 2488 A Knight's Journey(一)
2015-01-22 22:53:06 来源: 作者: 【 】 浏览:313
Tags:POJ 2488 Knight' Journey
A Knight's Journey
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 23108 Accepted: 7819
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
读懂了题目这题就会做了,以前的马在跳的时候都是在线上,这个题是这方格内还真有些不适应,转化成在线上就好
[cpp] ?
#include ?
#include ?
int status[100][100],s; ?
int vex[]={-2,-2,2,2,-1,-1,1,1}; ?
int vey[]={-1,1,-1,1,-2,2,-2,2}; ?
char path1[1000],prepath1[1000]; ?
int path2[1000],prepath2[1000],top,n,m,key,k; ?
int main() ?
{ ?
? ? void dfs(int x,int y); ?
? ? int i,j,t,tem; ?
? ? scanf("%d",&t); ?
? ? tem=1; ?
? ? while(t--) ?
? ? { ?
? ? ? ? scanf("%d %d",&n,&m); ?
? ? ? ? memset(status,0,sizeof(status)); ?
? ? ? ? if(n==1&&m==1) ?
? ? ? ? { ?
? ? ? ? ? ? printf("Scenario #%d:\n",tem); tem++; ?
? ? ? ? ? ? printf("A1\n"); ?
? ? ? ? ? ? printf("\n"); ?
? ? ? ? ? ? continue; ?
? ? ? ? } ?
? ? ? ? for(i=1;i<=n;i++) ?
? ? ? ? { ?
? ? ? ? ? ? for(j=1;j<=m;j++) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? top=0;s=1; ?
? ? ? ? ? ? ? ? memset(status,0,sizeof(status)); ?
? ? ? ? ? ? ? ? prepath1[top]='A'+j-1; ?
? ? ? ? ? ? ? ? prepath2[top++]=i; ?
? ? ? ? ? ? ? ? status[i][j]=1; ?
? ? ? ? ? ? ? ? key=0; k=0; ?
? ? ? ? ? ? ? ? dfs(i,j); ?
? ? ? ? ? ? ? ? if(k==1) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? break; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if(j!=m+1) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? break; ?
? ? ? ? ? ? } ?
? ? ? ? } ?
? ? ? ? printf("Scenario #%d:\n",tem); tem++; ?
? ? ? ? if(i!=n+1) ?
? ? ? ? { ?
? ? ? ? ? ? for(i=0;i<=n*m-1;i++) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? printf("%c%d",path1[i],path2[i]); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? printf("\n"); ?
? ? ? ? }else ?
? ? ? ? { ?
? ? ? ? ? ? printf("impossible\n"); ?
? ? ? ? } ?
? ? ? ? printf("\n"); ?
? ? } ?
? ? return 0; ?
} ?
void dfs(int x,int y) ?
{ ?
? ? int i,j,xend,yend,change; ?
? ? for(i=0;i<=7;i++) ?
? ? { ?
? ? ? ? xend=x+vex[i]; yend=y+vey[i]; ?
? ? ? ? if(xend>=1&&xend<=n&?d>=1&?d<=m&&!status[xend][yend]) ?
? ? ? ? { ?
? ? ? ? ? ? s++; ?
? ? ? ? ? ? prepath1[top]=yend+'A'-1; ?
? ? ? ? ? ? prepath2[top++]=xend; ?
? ? ? ? ? ? status[xend][yend]=1
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇extern "C 下一篇while(cin>>ch)如何退出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: