Knight Moves
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11197 | Accepted: 6318 |
Description
A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.
Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.
Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.
Input
The input will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing the row on the chessboard.
Output
For each test case, print one line saying "To get from xx to yy takes n knight moves.".
Sample Input
e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 h8 a1 b1 c3 f6 f6
Sample Output
To get from e2 to e4 takes 2 knight moves. To get from a1 to b2 takes 4 knight moves. To get from b2 to c3 takes 2 knight moves. To get from a1 to h8 takes 6 knight moves. To get from a1 to h7 takes 5 knight moves. To get from h8 to a1 takes 6 knight moves. To get from b1 to c3 takes 1 knight moves. To get from f6 to f6 takes 0 knight moves.
Source
分析:这道题目也是BFS的水题,主要意思就是给你出发坐标,和目标坐标,然后移动路径只能跳日字格,和中国象棋中的马的走法一直,问你最快需要多少步。
//BFS 图的遍历 广度优先搜索POJ 2243 #include<cstdio> #include<queue> #include<string.h> using namespace std; struct Point{ int x; int y; int step; }; const int MAXN = 10; char a[3]; char b[3]; int stax,stay,endx,endy,step; bool visit[MAXN][MAXN]; queue<Point> pl; int dir[8][2] = {{-2,1},{-1,2},{1,2},{2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}}; int BFS(int stx,int sty,int edx,int edy){ if(stx == edx && sty == edy)return 0; Point p; p.x = stx; p.y = sty; p.step = 0; pl.push(p); visit[stx][sty] = 1; while(!pl.empty()){ Point temp = pl.front(); pl.pop(); for(int i=0;i<8;i++){ Point newP; newP.x = temp.x + dir[i][0]; newP.y = temp.y + dir[i][1]; newP.step = temp.step + 1; if(newP.x == edx && newP.y == edy){ return newP.step; } if(newP.x>0&&newP.y>0&&newP.x<=8&&newP.y<=8&&!visit[newP.x][newP.y]) pl.push(newP); visit[newP.x][newP.y] = 1; } } } int main(){ while(scanf("%s %s",a,b)== 2){ while(!pl.empty()){ pl.pop(); } a[2] = '\0'; b[2] = '\0'; memset(visit,0,sizeof(visit)); stax = (int)(a[1]-48); stay = (int)(a[0]-96); endx = (int)(b[1]-48); endy = (int)(b[0]-96); int ans = BFS(stax,stay,endx,endy); printf("To get from %s to %s takes %d knight moves.\n",a,b,ans); } return 0; }
相关推荐
【北大POJ2243Knight Moves】是一个典型的图论问题,主要涉及到国际象棋中的马(Knight)的移动规则以及最短路径的计算。在国际象棋中,马每一步可以向前后各跳两格,然后横向或纵向跳一格,形成一个“L”形的移动...
在本题目中,“北大 ACM JudgeOnline poj1915 Knight Moves”要求解决的是一个经典的骑士行走问题。具体来说,题目背景提到了一位自称无人能及的国际象棋高手Mr. Somurolov,他声称没有人能够像他那样快速地移动骑士...
【标题】"POJ2488-A Knight's Journey【骑士游历】" 【知识点解析】 本题是来自北京大学在线编程平台POJ的一道经典算法题——“骑士游历”。题目要求解决的是一个典型的图论问题,即在国际象棋棋盘上,骑士能否...
* 2243 Knight Moves * 2249 Binomial Showdown * 2255 Tree Recovery * 2084 Game of Connections * 1906 Three powers * 1835 宇航员 * 1799 Yeehaa! * 1607 Deck * 1244 Slots of Fun * 1269 Intersecting Lines ...
* 图的深度优先遍历和广度优先遍历:图的深度优先遍历和广度优先遍历是指遍历图的两种方式,如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 * 最短路径算法:最短路径算法是指计算图中两点之间的最短...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...
根据给定的文件信息,我们可以总结出一份详细的IT知识训练计划,主要针对编程竞赛和算法学习,特别是聚焦于POJ(Problem Online Judge)平台上的题目训练。这份计划分为两个阶段,初级阶段和中级阶段,共计涉及了165...
【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...
标题中的"jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c" 提到了一个压缩文件,可能包含有关编程竞赛或算法解决的资源,特别是与POJ(Problem On Judge)平台上的问题3714相关的。"Ra_visual c"可能指的是...
* 较为复杂的动态规划:例如 poj1191、poj1054、poj3280、poj2029、poj2948、poj1925、poj3034。 数学 1. 组合数学: * 加法原理和乘法原理。 * 排列组合。 * 递推关系:例如 poj3252、poj1850、poj1019、poj...
- **例题**:poj1860, poj3259, poj1062, poj2253, poj1125, poj2240 - **解释**:最短路径算法包括Dijkstra算法、Bellman-Ford算法、Floyd算法以及堆优化的Dijkstra算法等。 ##### (3) 最小生成树算法 - **例题**...
标题和描述中的“poj各种分类”主要指向的是在POJ(Peking University Online Judge)平台上,根据解题策略和算法类型对题目进行的分类。POJ作为一个知名的在线编程平台,提供了大量的算法练习题,适合从初学者到...
【标题】"POJ1837-Balance"是一个在线编程竞赛题目,源自著名的编程练习平台POJ(Programming Online Judge)。这个题目旨在测试参赛者的算法设计和实现能力,特别是处理平衡问题的技巧。 【描述】"解题报告+AC代码...
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
【标题】"POJ1201-Intervals" 是北京大学在线编程平台POJ上的一道题目,这道题目主要涉及计算机科学中的算法设计与分析,尤其是数据结构和时间复杂度优化方面的知识。 【描述】"北大POJ1201-Intervals 解题报告+AC...
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
【标题】"POJ1010-STAMPS"是一个编程题目,来源于北京大学的在线判题系统POJ(Problem Set of Peking University),这是一处训练程序员算法技能和编程能力的平台。该题目旨在考察参赛者对动态规划或贪心算法的理解...