//真是麻烦的一道题,从左到右,从上到下依次枚举每一个点,先判断后是否能够到达这个点 //(注意不能够越点,也就是要考虑后起点和终点之间不能存在其它点),若能够到达则继续判断 //是否能够将死的情况。由于只有一个王的情况下,王可以选择不动,所以白方移动后必须要形成 //对黑王攻击的局面。 #include<stdio.h> #include<string.h> #include<stdlib.h> int loc[3][2]; char tem[3][4]; int di[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1}; //判断皇后是否可达这个点 int arrive(int p,int q) { int i,j,max,min; max=q>loc[1][1]?q:loc[1][1]; min=q<loc[1][1]?q:loc[1][1]; //去掉已经被三个棋占用的点 for(i=0;i<3;i++) { if(loc[i][0]==p&&loc[i][1]==q) return 0; } //假设水平可达,若中间有子则不可达 if(p==loc[1][0]) { if(loc[0][0]==p&&loc[0][1]>min&&loc[0][1]<max) return 0; if(loc[2][0]==p&&loc[2][1]>min&&loc[2][1]<max) return 0; return 1; } max=p>loc[1][0]?p:loc[1][0]; min=p<loc[1][0]?p:loc[1][0]; //垂直方向 if(q==loc[1][1]) { if(loc[0][1]==q&&loc[0][0]>min&&loc[0][0]<max) return 0; if(loc[2][1]==q&&loc[2][0]>min&&loc[2][0]<max) return 0; return 1; } //对角线情况,主要注意在同一条对角线上,因为从一个点考虑对角线有2条 if(abs(p-loc[1][0])==abs(q-loc[1][1])) { max=q>loc[1][1]?q:loc[1][1]; min=q<loc[1][1]?q:loc[1][1]; if(abs(p-loc[0][0])==abs(q-loc[0][1])) { //确保三个点在同一对角线上 if(abs(loc[0][0]-p)+abs(loc[1][0]-loc[0][0])==abs(loc[1][0]-p)) return 0; } if(abs(p-loc[2][0])==abs(q-loc[2][1])) { if(abs(loc[2][0]-p)+abs(loc[2][0]-loc[1][0])==abs(loc[1][0]-p)) return 0; } return 1; } return 0; } int decide(int p,int q) { int i,x,y; //首先判断移动后的点是否能够攻击到黑方的王 if((p==loc[2][0]||q==loc[2][1]||abs(p-loc[2][0])==abs(q-loc[2][1]))||(abs(loc[0][0]-loc[2][0])<2/ &&abs(loc[0][1]-loc[2][1])<2)) ; else return 0; //考虑黑方移动后(八个方向)是否还有活路 for(i=0;i<8;i++) { x=loc[2][0]+di[i][0]; y=loc[2][1]+di[i][1]; if(x<=8&&x>0&&y<=8&&y>0) { ///考虑皇后移动后并且能被黑王吃掉,之后白王能否攻击黑王 if(x==p&&q==y) { if(abs(loc[0][0]-x)<2&&abs(loc[0][1]-y)<2) ; else return 0; } if((abs(loc[0][0]-x)<2&&abs(loc[0][1]-y)<2)||x==p||y==q||abs(x-p)==abs(y-q)) ; else return 0; } } return 1; } int main() { freopen("in.txt","r",stdin); freopen("ou.txt","w",stdout); while(scanf("%s%s%s",tem[0],tem[1],tem[2])==3) { int i,j,end=0; for(i=0;i<3;i++) { loc[i][0]=tem[i][0]-'a'+1; loc[i][1]=tem[i][1]-'0'; } for(i=1;i<=8;i++) { for(j=1;j<=8;j++) { if(arrive(i,j)&&decide(i,j)) { end=1; break; } } if(end) break; } if(end) printf("%c%d/n",i+'a'-1,j); else printf("no/n"); } return 0; }

POJ_1647_One-move checkmate相关推荐

  1. python国际象棋ai程序_用Python编写一个国际象棋AI程序

    最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...

  2. python国际象棋ai程序_Python开发AI应用-国际象棋应用

    AI 部分总述 AI在做出决策前经过三个不同的步骤.首先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种).其次,它生成一个棋步树用来随后决定最佳决策.虽然树的大小随深度指数 ...

  3. python国际象棋ai程序_用 Python 编写一个国际象棋 AI 程序

    最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...

  4. python国际象棋规则_如何使用Python编写一个国际象棋AI程序

    最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...

  5. python编写ai电话_用Python编写一个国际象棋AI程序

    最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...

  6. hdu4121 象棋checkmate模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4121 几百年前就做过这道题了,没想到坑到这个地步了..... 很简单,就是判断一个黑先手的局面是否checkma ...

  7. Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied

    Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied ...

  8. pandas使用insert函数将dataframe特定数据列移动到第一列实战:Move a Column to First Position

    pandas使用insert函数将dataframe特定数据列移动到第一列实战:Move a Column to First Position 目录 pandas使用insert函数将datafram ...

  9. 请使用 WITH MOVE 选项来标识该文件的有效位置。

    1 RESTORE FILELISTONLY FROM DISK ='F:\公司项目\2012年12月\k恺威寰宇解决方案\恺威寰宇Web\App_Data\xclh(1).bak' 2 3 REST ...

  10. “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案

    苹果为了我们的软件安全也是操碎了心,很多小伙伴发现下载自各种第三方的软件在使用时都会弹出: "XXXXX" is damaged and can't be opened. You ...

最新文章

  1. linux下彻底杀死ngnix进程方法
  2. hadoop mac和linux,How to Install Hadoop? (On Mac OS,Linux or Cygwin on Windows)
  3. Activity(二)
  4. 面试宝典系列-mysql面试基础题
  5. bash脚本:case语句
  6. HTML基础——HTML
  7. Mac连接Windows共享的老式打印机
  8. python爬取今日头条专栏_[python3]今日头条图片爬取
  9. RTX 3090Ti发布!元宇宙平台开放!
  10. 【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
  11. 暖风熏的游人醉 直把杭州作汴州 题临安邸--林升
  12. 建模工具:octave
  13. 任正非的忠告:不赚钱的产品就关闭压缩
  14. Few-Shot Classification of Aerial Scene Images via Meta-Learning(基于元学习的航拍场景图像小样本分类)
  15. 基于高德SDK实现跑步时轨迹渐变功能
  16. 使用ALLHiC基于HiC数据辅助基因组组装
  17. switch语句 while循环 do-while循环
  18. seo文章重复率高不利于收录
  19. odb 使用指南(四)数据库查询
  20. 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

热门文章

  1. 【二维码营销案例】圣诞促销活动如何设计二维码能拉新留存促活转化?
  2. linux单机游戏存放目录,Linux安装RocketMQ单机版教程
  3. 程序员的浪漫------下雪氛围圣诞树源码
  4. JavaWeb学习心得总结
  5. 云笔记是干什么用的,看云笔记的优点和使用心得分享
  6. 数字图像处理与应用——图像和视频压缩技术
  7. 什么是响应式布局?响应式布局有几种方法?
  8. ubuntu下安装电驴
  9. TPMS胎压传感器烧录器
  10. 温水煮青蛙,我还能活多久