Knight Moves
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.
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.
case, print one line saying "To get from xx to yy takes n knight
moves.".
e2 to e4 takes 2 knight moves.
a1 to b2 takes 4 knight moves.
b2 to c3 takes 2 knight moves.
a1 to h8 takes 6 knight moves.
a1 to h7 takes 5 knight moves.
h8 to a1 takes 6 knight moves.
b1 to c3 takes 1 knight moves.
f6 to f6 takes 0 knight moves.
#include
#include
#include
#define maxn 10
using namespace std;
int
dir[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{-2,1},{-1,2},{1,2},{2,1}};
int visit[maxn][maxn];
int check(int a,int b)
{
if(a<1||a>8||b<1||b>8||visit[a][b])
return 1;
else
return 0;
}
struct node
{
int
x,y;
int
times;
}start,fr,a;
int bfs(int sx,int sy,int x,int y)
{
memset(visit,0,sizeof(visit));
queue
Q;
start.x=sx;
start.y=sy;
start.times=0;
visit[start.x][start.y]=1;
Q.push(start);
while(!Q.empty())
{
fr=Q.front();
Q.pop();
//cout<<"x="<<x<<"
"<<"y="<<y<<endl;
if(fr.x==x&&fr.y==y)
return fr.times;
for(int i=0;i<8;i++)
{
a.x=fr.x+dir[i][0];
a.y=fr.y+dir[i][1];
if(check(a.x,a.y))
continue;
a.times=fr.times+1;
visit[a.x][a.y]=1;
Q.push(a);
}
}
int main()
{
//freopen("in.txt", "r", stdin);
char
a,b;
int
sx,sy,x,y;
while(~scanf("%c%d %c%d\n",&a,&sy,&b,&y))
{
//cout<<"sx="<<a<<endl;
//cout<<"sy="<<sy<<endl;
//cout<<"x="<<b<<endl;
//cout<<"y="<<y<<endl;
sx=a-'a'+1;
x=b-'a'+1;
//坐标转化成数字
int ans=bfs(sx,sy,x,y);
printf("To get from %c%d to %c%d takes %d knight
moves.\n",a,sy,b,y,ans);
}
return
0;
}
Knight Moves的更多相关文章
- Knight Moves
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU 1372 Knight Moves
最近在学习广搜 这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...
- [宽度优先搜索] HDU 1372 Knight Moves
Knight Moves Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- HDU 1372 Knight Moves (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...
- UVA 439 Knight Moves --DFS or BFS
简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...
- 【POJ 2243】Knight Moves
题 Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are ...
- hdu Knight Moves
这道题实到bfs的题目,很简单,不过搜索的方向变成8个而已,对于不会下象棋的会有点晕. #include <iostream> #include <stdio.h> #incl ...
- HDU 1372 (搜索方向稍有改变) Knight Moves
其实手写模拟一个队列也挺简单的,尤其是熟练以后. 尼玛,这题欺负我不懂国际象棋,后来百度了下,国际象棋里骑士的走法就是中国象棋里面的马 所以搜索就有八个方向 对了注意初始化标记数组的时候,不要把起点标 ...
- HDU 1372 Knight Moves【BFS】
题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...
- UVA 439 Knight Moves
// 题意:输入标准国际象棋棋盘上的两个格子,求马最少需要多少步从起点跳到终点 BFS求最短路: bfs并维护距离状态cnt, vis记录是否访问过 #include<cstdio> ...
随机推荐
- webView 不能复制解决方案
开发中遇到部分机型--主要是系统低于4.0,如果调用了WebView.setWebChromeClient的方法,则没办法长按复制文字 查了一下是系统的一个bug https://bugzilla. ...
- bzoj 3212 Pku3468 A Simple Problem with Integers
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Description You ...
- spring实例化dataSource使用jndi和jdbc两种方式
一.使用jndi的方式 这种方式方便测试人员不需要改代码,直接改变tomcat的server.xml就可以更改数据库连接 spring创建bean <bean id="dataSour ...
- border-radius:50%和100%究竟有什么区别
之前写css圆形时总是直接设置border-radius为50%.后来看某css动画网站时发现作者都是用的100%.遂去了解了一下2者的差别. border-radius的值是百分比的话,就相当于盒子 ...
- jQuery: Callbacks
jQuery 中提供了一个Callback的工具类Callbacks,它提供了一个Callback Chain.使用它可以在一个chain上来执行相关操作.它也是jQuery中的ajax, Defer ...
- 快速搭建属于自己的数据库——mongodb
为了真实模拟一个项目上线,拥有前端后端数据库都具备的功能,我选择了mongodb作为项目的数据库支持,这里分享一些mongodb的经验心得和血的教训. mongoddb安装 在本地安装 直接通过官网下 ...
- Linux入门之常用命令(6)Bash命令重定向 管线命令
命令重定向 将目前所得数据转移到其他地方 > 将输出结果导入文件 如 ls -l / >test (1)若test文件不存在则创建 (2)若test文件存在 清空后写入 > ...
- hdu2157矩阵快速幂
How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 表空间tablespace,数据文件datafiles,和控制文件control files介绍
https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm#i5919 本文系翻译 表空间tablespace,数据文件da ...
- ABP增删改查代码片段
@using System.Web.Optimization @using MultiPageSimpleTask.Entitys.Dtos; @model IList<ProductDto&g ...