POJ_1647_One-move checkmate
//真是麻烦的一道题,从左到右,从上到下依次枚举每一个点,先判断后是否能够到达这个点 //(注意不能够越点,也就是要考虑后起点和终点之间不能存在其它点),若能够到达则继续判断 //是否能够将死的情况。由于只有一个王的情况下,王可以选择不动,所以白方移动后必须要形成 //对黑王攻击的局面。 #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相关推荐
- python国际象棋ai程序_用Python编写一个国际象棋AI程序
最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...
- python国际象棋ai程序_Python开发AI应用-国际象棋应用
AI 部分总述 AI在做出决策前经过三个不同的步骤.首先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种).其次,它生成一个棋步树用来随后决定最佳决策.虽然树的大小随深度指数 ...
- python国际象棋ai程序_用 Python 编写一个国际象棋 AI 程序
最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...
- python国际象棋规则_如何使用Python编写一个国际象棋AI程序
最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...
- python编写ai电话_用Python编写一个国际象棋AI程序
最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...
- hdu4121 象棋checkmate模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4121 几百年前就做过这道题了,没想到坑到这个地步了..... 很简单,就是判断一个黑先手的局面是否checkma ...
- Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied
Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied ...
- pandas使用insert函数将dataframe特定数据列移动到第一列实战:Move a Column to First Position
pandas使用insert函数将dataframe特定数据列移动到第一列实战:Move a Column to First Position 目录 pandas使用insert函数将datafram ...
- 请使用 WITH MOVE 选项来标识该文件的有效位置。
1 RESTORE FILELISTONLY FROM DISK ='F:\公司项目\2012年12月\k恺威寰宇解决方案\恺威寰宇Web\App_Data\xclh(1).bak' 2 3 REST ...
- “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
苹果为了我们的软件安全也是操碎了心,很多小伙伴发现下载自各种第三方的软件在使用时都会弹出: "XXXXX" is damaged and can't be opened. You ...
最新文章
- linux下彻底杀死ngnix进程方法
- hadoop mac和linux,How to Install Hadoop? (On Mac OS,Linux or Cygwin on Windows)
- Activity(二)
- 面试宝典系列-mysql面试基础题
- bash脚本:case语句
- HTML基础——HTML
- Mac连接Windows共享的老式打印机
- python爬取今日头条专栏_[python3]今日头条图片爬取
- RTX 3090Ti发布!元宇宙平台开放!
- 【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
- 暖风熏的游人醉 直把杭州作汴州 题临安邸--林升
- 建模工具:octave
- 任正非的忠告:不赚钱的产品就关闭压缩
- Few-Shot Classification of Aerial Scene Images via Meta-Learning(基于元学习的航拍场景图像小样本分类)
- 基于高德SDK实现跑步时轨迹渐变功能
- 使用ALLHiC基于HiC数据辅助基因组组装
- switch语句 while循环 do-while循环
- seo文章重复率高不利于收录
- odb 使用指南(四)数据库查询
- 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)