模拟题,我的做法是先让黑将分别上下左右移动,对每一种情况  先判断是否能被马将死(列举8种情况),然后判断是否能被 将 车 炮 将死(以黑将为中心十字展开,判断是否有 将 车 炮)

注意:

1.开局两将正对红方必输;

2.吃子情况;

3.输入问题(因为输入错了好多次)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>int main()
{
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);int judgewin(int qipan[15][15], int x, int y);int qipan[15][15];char s[5];int n,x,y;while(scanf("%d %d %d", &n, &x, &y) == 3 && n && x && y){memset(qipan,0,sizeof(qipan));//制盘int x1, y1;while(n--){scanf("%s%d%d", s, &x1, &y1);qipan[x1][y1] = s[0];}//放子if(judgewin(qipan,x,y)) printf("YES\n");else printf("NO\n");}
}int judgewin(int qipan[15][15], int x, int y)
{int judge(int qipan[15][15], int x, int y);char ch;int i;for(i = x; i <= 10; i++)if(qipan[i][y] != 0) break;if(i <=10 && qipan[i][y] == 'G') return 0;/*上*/if(x-1 >= 1){ch = qipan[x-1][y];qipan[x-1][y] = 0;if(judge(qipan,x-1,y)) return 0;}qipan[x-1][y] = ch;/*下*/if(x+1 <= 3){ch =  qipan[x+1][y];qipan[x+1][y] = 0;if(judge(qipan,x+1,y)) return 0;}qipan[x+1][y] = ch;/*左*/if(y-1 >= 4){ch = qipan[x][y-1];qipan[x][y-1] = 0;if(judge(qipan,x,y-1)) return 0;}qipan[x][y-1] = ch;/*右*/if(y+1 <= 6){ch = qipan[x][y+1];qipan[x][y+1] = 0;if(judge(qipan,x,y+1)) return 0;}qipan[x][y+1] = ch;return 1;
}int judge(int qipan[15][15], int x, int y)
{/*马*/if(qipan[x+1][y-2] == 'H' && qipan[x+1][y-1] == 0) return 0;if(qipan[x+2][y-1] == 'H' && qipan[x+1][y-1] == 0) return 0;if(qipan[x+1][y+2] == 'H' && qipan[x+1][y+1] == 0) return 0;if(qipan[x+2][y+1] == 'H' && qipan[x+1][y+1] == 0) return 0;if(x-1>=1 && qipan[x-1][y+2] == 'H' && qipan[x-1][y+1] == 0) return 0;if(x-2>=1 && qipan[x-2][y+1] == 'H' && qipan[x-1][y+1] == 0) return 0;if(x-2>=1 && qipan[x-2][y-1] == 'H' && qipan[x-1][y-1] == 0) return 0;if(x-1>=1 && qipan[x-1][y-2] == 'H' && qipan[x-1][y-1] == 0) return 0;/*炮 车 将*/int i, num = 0;for(i = x; i >= 1; i--){if(num == 1 && qipan[i][y] != 0){num++;if(qipan[i][y] == 'C') return 0;}if(qipan[i][y] != 0 && num == 0){num++;if(qipan[i][y] =='R') return 0;}}num = 0;for(i = x; i <= 10; i++){if(num == 1 && qipan[i][y] != 0){num++;if(qipan[i][y] == 'C') return 0;}if(qipan[i][y] != 0 && num == 0){num++;if(qipan[i][y] == 'G' || qipan[i][y] =='R') return 0;}}num = 0;for(i = y; i >= 1; i--){if(num == 1 && qipan[x][i] != 0){num++;if(qipan[x][i] == 'C') return 0;}if(qipan[x][i] != 0 && num == 0){num++;if(qipan[x][i] =='R') return 0;}}num = 0;for(i = y; i <= 9; i++){if(num == 1 && qipan[x][i] != 0){num++;if(qipan[x][i] == 'C') return 0;}if(qipan[x][i] != 0 && num == 0){num++;if(qipan[x][i] =='R') return 0;}}return 1;
}

UVA 1589 Xiangqi——模拟相关推荐

  1. UVA - 1589 ​​​​​​​Xiangqi

    Xiangqi UVA - 1589 题目传送门 解决方法:判断黑棋是否能有可以下的地方 AC代码: #include <cstdio> #include <iostream> ...

  2. uva 1589 - Xiangqi

    把所有红方的攻击范围标记出来,判断黑方四个方向是否在红方范围内 #include <iostream> #include <cstdio> #include <vecto ...

  3. Xiangqi UVA - 1589(蛮好玩的中国象棋~·)

    题目: 给出一个中国象棋残局,黑方只有将,红方有仅包含马車炮帅在内的n(2≤n≤7)个棋子,且黑方已被将军,输出是否已被将死(无路可走) R(车) C(炮) H(马) G(帅)(将) https:// ...

  4. HDU 4121 Xiangqi 模拟题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=4121 首先对标题赞一个,非要叫 "Xiangqi" 而不是 "中国象棋&q ...

  5. Xianqi UVa 1589

    这道题是一道模拟题,就是用来判断黑的一方能不能存活,所以就将黑的将军所有合法的移动情况都表示出来,看一看黑将军是否被红的将军,就可以了,主要注意的以下几点: 1.如果黑的能够直接杀死红的,那就输出 N ...

  6. Parentheses Balance UVA - 673(模拟)

    题目大意:类似于括号匹配. 思路:用栈简单模拟就行了,关键是怎么读入空格. 用getline(cin,str),就行了,如果读入的是空格怎么判断呢,只需要if(str[0]=='\0'),那么为什么不 ...

  7. 象棋 UVA 1589

    总结:这个代码可就长太多了- - 题目是要求我们看看能否将死对面黑将,炮,帅,车在逻辑上的移动我们可以归为一类,但就是炮呢在遇到自己的同色棋子之前的位置他是无法进行进攻的,所以我们需要创建一个atta ...

  8. HDU 4121 Xiangqi --模拟

    题意: 给一个象棋局势,问黑棋是否死棋了,黑棋只有一个将,红棋可能有2~7个棋,分别可能是车,马,炮以及帅. 解法: 开始写法是对每个棋子,都处理处他能吃的地方,赋为-1,然后判断将能不能走到非-1的 ...

  9. UVA 1589 象棋

    题意: 给出一个黑方的将, 然后 红方有 2 ~ 7 个棋子, 给出摆放位置,问是否已经把黑将将死, 红方已经将军. 分析: 分情况处理, 车 马 炮, 红将情况跟车是一样的. 建一个数组board保 ...

最新文章

  1. Java Spring Boot 2.0 实战之制作Docker镜像并推送到Docker Hub和阿里云仓库
  2. Yii2 中cookie的用法(2)
  3. 20200301 Intel Realsense D435摄像头掉线问题测试数据记录
  4. C# 正则表达式验证
  5. 1978:【18NOIP普及组】标题统计
  6. java中布局管理器的作用_使用Java布局管理器的目的是什么?
  7. cocos2d-x学习笔记番外篇05:如何快速屏蔽触摸
  8. 2021 王道考研 操作系统+习题讲解
  9. SQL Server 2019 安装教程
  10. 怎么改变鼠标图案HTML,怎么换鼠标指针的颜色和图案?
  11. 1038: 绝对值最大 Python
  12. 虚拟机激活win10
  13. 程序人生 - Nature封面:脑机接口突破,可将脑中“笔迹”转为屏幕字句,速度创纪录,准确率超高
  14. JavaSE(9)-细节狂魔:OOP之继承多态?20K字长篇看完,有手就行
  15. 每个故事是一座布满灰尘的城墙
  16. 下载到的电子书格式是Mobi,这种格式如何打开?
  17. 知识图谱-知识抽取(三):非结构化数据【DeepDive:基于远程监督的“关系抽取”】【斯坦福开发的开源知识抽取系统,通过弱监督学习,从非结构化的文本中抽取结构化的关系数据 】
  18. 利用声音传感器控制led灯功能_树莓派.利用声音传感器制作声控灯
  19. 精读论文:Multi-Task Learning as Multi-Objective Optimization(附翻译)
  20. 安装WGM需要java嘛,jdk7+apache-tomcat-7安装

热门文章

  1. 2017百度校园招聘编程题
  2. “思辨”与“思变”| 全永燊:城市智能交通发展思考
  3. python 录制web视频教程_如何录制网页上的直播视频?请尽量详细一点,最好是完整教程【】...
  4. HTML+CSS实现从右向左展开的过渡动画
  5. iPhone 5又曝光:内置大容量电池+nano-SIM卡
  6. arp miss攻击_详述网络中ARP安全的综合功能
  7. Hrbust 1176 小陈老师、雪人
  8. mysql 强制使用索引 FORCE INDEX(idx_name)
  9. xv6 - lab0 - 操作系统组织
  10. MATLAB里出现一大段橙色的字,出现这样的警告问题在哪呢