这道题目有个坑踩到了,就是我没玩过国际象棋,以为斜着走只能走斜率为正负1的直线走一次。。。

题目

ZCMU-1345
1345: 国际象棋
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 224 Solved: 75
[Submit][Status][Web Board]
Description
国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。
王、后、车、象的走子规则如下:
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。
你的任务是写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。

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

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

Sample Input
2
a1 c3
f5 f8
Sample Output
2 1 2 1
3 1 1 Inf
HINT
请使用%s读入字符串


想法

这道题其实是简单模拟,但是还是有几个点要注意一下的
首先我们把起点和终点的相对位置做一个分类。分为三类:
1.起点和终点同行或者同列
2.起点和终点在绝对值斜率为1的直线上
3.其他情况

这里面特别注意斜着走的有三种情况,一种是不能走,一种是一步走到,还有是走两步
首先,如果斜着能走到的话,那么起点和终点必须同色(上方棋盘中),也就是说起点横纵坐标相加和终点横纵坐标相加要同奇偶,这样再判断是否在绝对值斜率为1的直线上,如果是就是1步走到,不是则为两步走到

其他情况就简单了,我们直接上代码!


AC代码

#include<bits/stdc++.h>
using namespace std;
#define gcd __gcd;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pre(i,a,b) for(int i=a;i>=b;--i)
#define m(x) memset(x,0,sizeof x);
int dis_a,dis_b,dis_c,dis_d;
int main(){int T;int flag1,flag2;int Xs,Ys,Xe,Ye;char input1[5],input2[5];scanf("%d",&T);while(T--){//flag1标记起始和终点是否在同一行或者同一列//flag2标记是否在斜率为1的直线上flag1 = flag2 = 0;scanf("%s%s",input1,input2);Xs = input1[0] - 'a' + 1;Ys = input1[1] - '0';Xe = input2[0] - 'a' + 1;Ye = input2[1] - '0';
//        cout << Xs << " " << Ys << endl;
//        cout << Xe << " " << Ye << endl;if(Xs==Xe&&Ys==Ye){printf("0 0 0 0\n");continue;}if(Xs==Xe||Ys==Ye)flag1 = 1;if(fabs(Ys-Ye)==fabs(Xs-Xe))flag2 = 1;if(flag1){dis_a = fabs(Xs-Xe) + fabs(Ys-Ye);dis_b = 1;dis_c = 1;if((Xs+Ys)+(Xe+Ye)&1)//检查起点和终点是否在同色棋盘上printf("%d %d %d %s\n",dis_a,dis_b,dis_c,"Inf");elseprintf("%d %d %d %d\n",dis_a,dis_b,dis_c,2);continue;}if(flag2){dis_a = fabs(Xs-Xe);dis_b = dis_d = 1;dis_c = 2;printf("%d %d %d %d\n",dis_a,dis_b,dis_c,dis_d);continue;}dis_a = max(fabs(Xs-Xe),fabs(Ys-Ye));dis_b = 2;dis_c = 2;if((Xs+Ys)+(Xe+Ye)&1)printf("%d %d %d %s\n",dis_a,dis_b,dis_c,"Inf");elseprintf("%d %d %d %d\n",dis_a,dis_b,dis_c,2);}return 0;
}

ZCMU-1345: 国际象棋相关推荐

  1. LeetCode简单题之判断国际象棋棋盘中一个格子的颜色

    题目 给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标.下图是国际象棋棋盘示意图. 如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false ...

  2. java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器

    java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...

  3. node seneca_使用Node.js和Seneca编写国际象棋微服务,第1部分

    node seneca (This is Part 1 of a three-part series [Part 2, Part 3]) (这是一个由三部分组成的系列文章的第1部分[ 第2 部分 , ...

  4. DeepMind 打造 AI 游戏系统,可以玩扑克、国际象棋、围棋等,战斗力爆表

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 谷歌母公司 Alphabet 的人工智能实验室 DeepMind 长期以来一直投资于游戏人工智能系统.实验室的理念是,游戏虽然缺 ...

  5. 一盘棋都没下过,AI只听人类评论比赛,就学会了国际象棋,还战胜了DeepChess...

    转载 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI 一只AI要学会国际象棋,是不是一定要下过棋才行? 不一定. 伦敦大学学院的小伙伴们,开发了一只新的国际象棋AI,只看人类对比赛的评论, ...

  6. 中国象棋_通过设计国际象棋游戏来了解策略模式

    中国象棋 今天,我们将借助一个示例来尝试了解策略模式. 我们将考虑的示例是国际象棋游戏. 这里的目的是解释策略模式,而不是构建全面的国际象棋游戏解决方案. 策略模式:策略模式被称为行为模式–用于管理对 ...

  7. ZCMU 1894: Power Eggs

    http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1894 题意: 有M个鹰蛋,N层楼,鹰蛋的硬度是E,也就是说在1~E层楼扔下去不会碎,E+1层楼扔 ...

  8. java模拟国际象棋游戏_java国际象棋小游戏

    [实例简介] 用java编写的国际象棋游戏 在eclipse环境下可以运行 界面美观 适合初学者 [实例截图] [核心代码] https___download.csdn.net_download_mo ...

  9. 三百年前的AI骗局:骗过美国总统和普鲁士大帝的国际象棋AI

    大数据文摘出品 编译:顾晨波,宋欣仪 人工智能的历史告诉我们:随着科技的进步,机器会越来越聪明,但却鲜少涉及人类在其中发挥的重要作用,包括怎么设计机器的原型,以及怎么训练它等等. 最近,IEEE Sp ...

  10. cpu性能测试软件 国际象棋,国际象棋、科学计算,整机性能测试

    Fritz:国际象棋 Fritz Chess Benchmark是一款国际象棋测试软件,但它并不是独立存在的,而是<Fritz9>这款获得国际认可的国际象棋程序中的一个测试性能部分.它可以 ...

最新文章

  1. 松翰松翰c语言编程指导,松翰C程序检单例程代码下载
  2. linux 端口添加地址,linux – 绑定,网络(接口)和多播地址有什么区别?
  3. BZOJ 4898 Luogu P3778 [APIO2017]商旅 (分数规划、最短路)
  4. 计算机的桌面图片还原,电脑桌面图标重启后自动复原的解决方法。
  5. 通道设置_烟台240家住宅小区、346家重点单位完成消防车通道标识设置
  6. Arduino笔记-流水点灯
  7. yum更新指定的软件
  8. webWMS开发过程记录(三)- 需求分析(略)
  9. 阿里云自定义日记文件无法通过ftp下载
  10. uinty SkinnedMeshRenderer (二) batches 优化,模型合并网格贴图
  11. C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)
  12. C#根据工作经验来谈谈面向对象
  13. java去掉可最后一个逗号
  14. java 生产者消费者模式_聊聊并发(十)生产者消费者模式
  15. gitub优秀的android开源项目
  16. 把Apple ID 账号改成QQ邮箱教程
  17. 网络检测--命令检测网络
  18. 使用化学烧伤创建自定义的详细木材燃烧图案
  19. Oracle学习之建表
  20. TI CC3200 launchpad 简介

热门文章

  1. Java算法:经纬度转换 将百度转为高德经纬度
  2. 计算机基础——Word 2010
  3. 机器学习(2): K-means (k均值) 聚类算法 小结
  4. 不删除磁盘内容,如何给C盘扩容
  5. Ansys2019R2安装失败,更改用户名后win10用户创建临时账户登录个人总结
  6. Android Studio 开发实践——简易版音游APP(一)
  7. 一个简易Android购物App的开发
  8. 超高速V系列DMD空间光调制器
  9. IntelliJ Idea编译报错:请使用 -source 7 或更高版本以启用 diamond 运算符
  10. minmax()函数