博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 1589
阅读量:5148 次
发布时间:2019-06-13

本文共 2423 字,大约阅读时间需要 8 分钟。

题目大意就是:

一个象棋残局,红方有n(2<=n<=7) 个棋子,黑方只有一个将,红方除了帅,还可能有车,马,炮,并且要考虑“蹩马腿”,输入所有棋子的位置,保证局面合法并且红方已经将军,判断红方是否已经将黑方将死,

解题思路:

用一个棋盘保存红方可以打到的地方,看黑方将是否有其余的地方去,在竖直方向只要判断将能去的大方就可以,也就可以将帅和车一起判断,

#include
#include
#include
#include
using namespace std;char cb[12][10],ab[12][10];void RG(int a,int b){ //判断帅和车能到达的地方 int c; for(c=a-1;c>=1;c--){ ab[c][b]='S'; if(cb[c][b]!='A' && cb[c][b]!='B' ) break; } for(c=a+1;c<=3;c++){ ab[c][b]='S'; if(cb[c][b]!='A' && cb[c][b]!='B') break; } for(c=b+1;c<=9;c++){ ab[a][c]='S'; if(cb[a][c]!='A' && cb[a][c]!='B') break; } for(c=b-1;c>=1;c--){ ab[a][c]='S'; if(cb[a][c]!='A' && cb[a][c]!='B') break; }}void H(int a,int b){ //判断马可以去的地方 并且不能蹩马腿 if(cb[a][b+1]=='A'&&b+2<=9&&a-1>=1) ab[a-1][b+2]='S'; if(cb[a][b+1]=='A'&&b+2<=9&&a+1<11) ab[a+1][b+2]='S'; if(cb[a][b-1]=='A'&&b-2>=1&&a-1>=1) ab[a-1][b-2]='S'; if(cb[a][b-1]=='A'&&b-2>=1&&a+1<11) ab[a+1][b-2]='S'; if(cb[a+1][b]=='A'&&b-1>=1&&a+2<11) ab[a+2][b-1]='S'; if(cb[a+1][b]=='A'&&b+1<=9&&a+2<11) ab[a+2][b+1]='S'; if(cb[a-1][b]=='A'&&b-1>=1&&a-2>=1) ab[a-2][b-1]='S'; if(cb[a-1][b]=='A'&&b+1<=9&&a-2>=1) ab[a-2][b+1]='S';}void C(int a,int b){ //判断炮的位置 if(b>=4 && b<=6 && a==1){ //只需要判断在范围内的,外面的不考虑 if(cb[2][b]!='A' && cb[2][b]!='B') ab[3][b]='S'; } int c,d; //用两个循环判断中间是否有棋子,分别判断三个方向,面向红方帅的方向不用判断 for(c=a-1;c>=1;c--){ if(cb[c][b]=='B') return ; if(cb[c][b]!='A') break; } for(d=c-1;d>=1;d--){ ab[d][b]='S'; if(cb[d][b]!='A' && cb[d][b]!='B') break; } for(c=b+1;c<=9;c++){ if(cb[a][c]=='B') return; if(cb[a][c]!='A') break; } for(d=c+1;d<=9;d++){ ab[a][d]='S'; if(cb[a][d]!='A' && cb[a][d]!='B') break; } for(c=b-1;c>=1;c--){ if(cb[a][c]=='B') return ; if(cb[a][c]!='A') break; } for(d=c-1;d>=1;d--){ ab[a][d]='S'; if(cb[a][d]!='A' && cb[a][d]!='B') break; }}int judge(int i,int j){ //最后判断将的去处 int ok=1; if(i+1<=3 && ab[i+1][j]!='S') ok=0; if(i-1>=1 && ab[i-1][j]!='S') ok=0; if(j+1<=7 && ab[i][j+1]!='S') ok=0; if(j-1>=4 && ab[i][j-1]!='S') ok=0; return ok;}int main(){ int n,a1,b1; int Ch[8][3]; while(cin>>n>>a1>>b1&&n&&a1&&b1){ memset(cb,'A',sizeof(cb)); //起始棋盘 memset(ab,'A',sizeof(ab)); //目标棋盘 memset(Ch,0,sizeof(Ch)); //保存输入 cb[a1][b1]='B'; char ch; for(int k=0;k
>ch>>i>>j; cb[i][j]=ch; Ch[k][0]=i; Ch[k][1]=j; } for(int m=0;m

转载于:https://www.cnblogs.com/Double-LL/p/6658926.html

你可能感兴趣的文章
windows 2003 Server平台Delphi程序不支持直接调用webservice
查看>>
电子书下载:Professional ASP.NET Design Patterns
查看>>
random 产生一个随机数的方法
查看>>
RST_n的问题
查看>>
欢迎来我的#百度相册#时光轴,坐上时光机,与我一起穿梭时空!
查看>>
------结对作业代码复审-----
查看>>
ASP.NET 获得当前网页名字
查看>>
windows pear 安装
查看>>
22Spring基于配置文件的方式配置AOP
查看>>
H5页面在微信端的分享
查看>>
python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器...
查看>>
例6-5
查看>>
eclipse变量名自动补全
查看>>
一个数据库操作类(包含弹出对话框函数,也可自定义弹出的脚本内容)
查看>>
HIVE文件
查看>>
转——调试寄存器 原理与使用:DR0-DR7
查看>>
C# MP3文件属性读取
查看>>
团队冲刺06
查看>>
java字节流复制文件
查看>>
重载和覆盖
查看>>