import java.util.*;class Main2 {static char[][] cb=new char[12][10];//放置所有棋子的棋盘static char[][] ab=new char[12][10];//标记红方可到达的位置public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n,i,j,a1,b1;int[][] Ch=new int[8][3];while(true) {n=sc.nextInt();//红方棋子个数a1=sc.nextInt();//黑将横坐标b1=sc.nextInt();//黑将纵坐标if(n*n+a1*a1+b1*b1==0)break;for (int k = 0; k < cb.length; k++) {for (int l = 0; l < cb[0].length; l++) {Arrays.fill(cb[k], 'A');//初始化Arrays.fill(ab[k], 'A');//初始化}}cb[a1][b1]='B';//标记黑将char ch;for (int k = 0; k < n; k++) {ch=sc.next().toCharArray()[0];i=sc.nextInt();j=sc.nextInt();cb[i][j]=ch;//摆放旗子到棋盘Ch[k][0]=i;//该棋子横坐标Ch[k][1]=j;//该棋子纵坐标}for (int m = 0; m < n; m++) {int a=Ch[m][0];//读取棋子横坐标int b=Ch[m][1];//读取棋子纵坐标//红方棋子为 :車 或 帅,进行标记if(cb[a][b]=='R' || cb[a][b]=='G' ) RG(a,b);//红方棋子为 :马,进行标记else if(cb[a][b]=='H') H(a,b);//红方棋子为 :炮,进行标记else if(cb[a][b]=='C') C(a,b);}if(judge(a1,b1)) {System.out.println("YES");}else {System.out.println("NO");}}}//炮private static 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;//直到遇到红方棋子}}//马:八个方位,如果可到达,且未越界,则标记private static 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';}//帅看作和車一样的功能:棋子所在的那一行那一列都可以到达,直到遇到红方棋子private static 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 <= 10; 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;}}private static boolean judge(int i, int j) {boolean flag=true;//将军if(i+1<4 && ab[i+1][j]!='S') flag=false;//黑将在九宫格的前两行,他的下方位置他可以走,则没有将军if(i-1>0 && ab[i-1][j]!='S') flag=false;//黑将在九宫格的后两行,他的上方位置他可以走,则没有将军if(j+1<7 && ab[i][j+1]!='S') flag=false;//黑将在九宫格的前两列,他的右方位置他可以走,则没有将军if(j-1>3 && ab[i][j-1]!='S') flag=false;//黑将在九宫格的后两列,他的左方位置他可以走,则没有将军return flag;}
}

UVA 1589 java相关推荐

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

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

  2. UVA 1589 象棋

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

  3. UVA 1589 Xiangqi——模拟

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

  4. Xianqi UVa 1589

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

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

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

  6. uva 1589 - Xiangqi

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

  7. 象棋 UVA 1589

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

  8. UVa Online Judge 西班牙Valladolid 在线判官 和 uDebug使用简单教程

    udebug使用在后面 https://uva.onlinejudge.org/ 1.这是主界面,如果你还没有账号,那么就点击图中的register. 2.然后就是填写信息,邮箱要用gmail,信息填 ...

  9. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. php js统计链接点击次数,JS实现在线统计一个页面内鼠标点击次数的方法
  2. 用python的turtle画圆-怎么用python画圆
  3. 懂球帝 X 七牛云:纯粹有趣的足球遇上简单可信赖的技术
  4. Spring Boot 动态注入的两种方式
  5. 区块链不适用的若干场景
  6. html 块级注释,HTML blockquote 标签 | 教程 | codingbefore
  7. easyui 分页保存checkbox的选中状态
  8. 2022年计算机软件水平考试软件设计师(中级)练习题及答案
  9. 电磁场理论基础 01-17
  10. codeblock的下载
  11. 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
  12. 模拟停车场管理系统(栈和队列的应用)
  13. python实现.jpeg转.jpg
  14. 如何将本地代码保存至码云中
  15. 你知道吗?计算机界也有诺贝尔奖!
  16. 垂直网站之路:金融风暴加速向电子商务转型
  17. WinSCP乱码解决
  18. 读PPK谈javascript
  19. XSS注入进阶练习篇(三) XSS原型链污染
  20. Java判断单个字符是否为空格

热门文章

  1. [Jeremy Wu]冒险之路,平凡之路【详细注释版】
  2. Adobe Dreamweaver 序列号 过期
  3. 4.1安卓html样式,界面样式大改版!安兔兔v4.1新版发布
  4. 折弯机使用说明书_折弯机的操作流程和应用方法
  5. 论文解读《MSNet-4mC:学习有效的多尺度表示来识别DNAn4-甲基胞嘧啶位点》
  6. 可导/可微/连续的关系
  7. Git cherry-pick 复制多个commit
  8. js变量拼接单引号和双引号
  9. OWASP DVWA XSS reflectedstored全系列
  10. Jackson中JsonNode的取值asText()和textValue()区别