一、Description

国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:

王、后、车、象的走子规则如下:

  • 王:横、直、斜都可以走,但每步限走一格。
  • 后:横、直、斜都可以走,每步格数不受限制。
  • 车:横、竖均可以走,不能斜走,格数不限。
  • 象:只能斜走,格数不限。

写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。

Input

第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。

Output

对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf".

二、题解

        目标:输出王、后、车、象从给定起点到终点坐标所需的最少步数。

        方法:逐个分析。

                    王:输出横坐标差的绝对值与纵坐标差的绝对值的最大值。这个最大值是横坐标或纵坐标的最大差值,由于走一个斜着走一个相当于走一个横格和一个竖格。所以如果横格和竖格差的最小值可以有斜格代替,剩下的就走横格或竖格。           


                    后:如果在同一斜线上或者同一行或者同一列上输出1,否则后可以通过两步到达任何坐标,输出2。

                    车:如果在同一行上或者同一列上则输出1,否则车可以通过两步到达任何坐标,输出2。

                    象:由于黑象只能走黑格,白象只走白格。所以如果起点与终点的颜色不同输出Inf,如果在同一斜线上则一步到达,输出1,否则任何坐标都可以通过一个中转到达  ,输出2。

        注意:要提前分析起始和终点坐标相同的情况。如果相同则输出四个0,否则按上面的方法求。

三、Java代码

import java.util.Scanner;

  public class Main {
static int k,q,c;
static String e;
public static void King(int x1, int y1, int x2, int y2){
int x = Math.abs(x1 - x2);
int y = Math.abs(y1 - y2);
if(x > y)
k= x;
else
k= y;
}
public static void Queen(int x1, int y1, int x2, int y2){
if(x1 == x2 || y1 == y2|| directCon(x1, y1, x2, y2))
q= 1;
else
q= 2;
} public static void Car(int x1, int y1, int x2, int y2){
if(x1 == x2 || y1 == y2)
c= 1;
else
c= 2;
} public static void Elephant(int x1, int y1, int x2, int y2){
e="2";
if((x1 + y1) % 2 != (x2 + y2) % 2)
e="Inf";
if(directCon(x1, y1, x2, y2) == true)
e= "1"; }
public static boolean directCon(int x1, int y1, int x2, int y2){
if(Math.abs(x1-x2)==Math.abs(y1-y2))
return true;
return false;
} public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String[] s=new String[2];
int x1,y1,x2,y2;
int n=sc.nextInt();
while(n--!=0){
s[0]=sc.next();
s[1]=sc.next();
x1=s[0].charAt(0)-96;
y1=s[0].charAt(1)-48;
x2=s[1].charAt(0)-96;
y2=s[1].charAt(1)-48;
if(x1==x2 && y1==y2){
System.out.println(0+" "+0+" "+0+" "+0);
}else{
King(x1, y1, x2, y2);
Queen(x1, y1, x2, y2);
Car(x1, y1, x2, y2);
Elephant(x1, y1, x2, y2);
System.out.println(k+" "+q+" "+c+" "+e);
}
}
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Poj 1659 Distance on Chessboard(国际象棋的走子规则)的更多相关文章

  1. POJ 1657 Distance on Chessboard 简单的计算问题

    Distance on Chessboard Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23096   Accepted ...

  2. OpenJudge/Poj 1657 Distance on Chessboard

    1.链接地址: http://bailian.openjudge.cn/practice/1657 http://poj.org/problem?id=1657 2.题目: 总时间限制: 1000ms ...

  3. POJ1657 Distance on chessboard

    Distance on Chessboard Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25623   Accepted ...

  4. POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)

    POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...

  5. 1657 Distance on Chessboard(简单计算题)

    描述 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示:王.后.车.象的走子规则如下: 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走,每步格数不受限制. 车 ...

  6. POJ.1986 Distance Queries ( LCA 倍增 )

    POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...

  7. poj 1659 Frogs&#39; Neighborhood 度序列可图化 贪心

    题意: 对一个无向图给出一个度序列,问他是否可简单图化. 分析: 依据Havel定理,直接贪心就可以. 代码: //poj 1659 //sep9 #include <iostream> ...

  8. POJ 1986 Distance Queries LCA两点距离树

    标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ...

  9. poj 1659 Frog's Neighborhood

    未名湖附近共有N个大小湖泊L1, L2, -, Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只 ...

随机推荐

  1. 测试站如何最快获取正式站的最新数据: ln -s

    针对静态数据, 比如图片/js等文件, 测试站如何获取最新的呢? ln -s /alidata/www/mysite/uploads /alidata/www/mysite_test/uploads ...

  2. hibernate多对多关系配置

    一.创建用户,角色实体类. 一名用户可以有多个角色.一个角色可以对于多名用户. 用户实体类 public class User { private int uId; private String uN ...

  3. JVM性能优化, Part 2 ―― 编译器

    作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson ...

  4. Django中的Cookie和Session操作以及CBV

    1.Cookie 平常我们在浏览网页的时候,在需要输入密码的地方,如果已经登陆了一次,并且时间间隔比较近的话,是不需要登陆的,为什么了?这就是Cookie的作用. Cookie(或Cookies)指某 ...

  5. LeetCode:移除K位数字【402】

    LeetCode:移除K位数字[402] 题目描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. nu ...

  6. 小程序坑 redirectTo 计时器 setInterval clearInterval

    var time = 20: var timer = setInterval(function () { time = time - 1; that.setData({ CountDown: time ...

  7. 培训笔记——Linux基本命令

    在介绍命令之前,更重要的要先介绍一下快速输入命令的方法. 如果你能记住一些常用命令,毫无疑问,通过命令的操作方式比通过鼠标的操作方式要快. 但是有一些命令或是命令用到的参数如文件名特别复杂特别长,这时 ...

  8. org.eclipse.core.resources.bak文件导致MyEclipse每次关闭时无法保存文件

    MyEclipse关闭时提示如下信息 Problems occurred while trying to save the state of the workbench. Internal Error ...

  9. Vue2.0项目

    什么是 Vue Vue 是一个前端框架,特点是 数据绑定 比如你改变一个输入框 Input 标签的值,会 自动同步 更新到页面上其他绑定该输入框的组件的值  组件化 页面上小到一个按钮都可以是一个单 ...

  10. 英语发音规则---ir字母组合发音规律

    英语发音规则---ir字母组合发音规律 一.总结 一句话总结: 这个字母组合通常在单词中读[ɜː]:girl /gɜːl/ n. :shirt /ʃɜːt/ n. girl /gɜːl/ n. 女孩 ...