题目链接:UVA - 1589 Xiangqi 
题目大意: 
给定一个象棋残局,黑方只有一个将,红方有帅以及3种可能棋子(车马炮),当前局面合法并保证红方已将军,问是否可以将黑方将死? 
思路: 
很简单的一道题,可以对黑将可走的地方进行判断,判断红方是否可以攻击到。或者标记红方所有子可以攻击的点,然后判断黑将可走的坐标中有没有没被标记的。 
思路简单,写的过程wrong了好多次,因为好多小细节,纪录于下: 
1:越界问题 
2:残局初始状态下,将帅若见面,帅死,即不能将黑方将死。 
3:马的绊蹄问题(玩过象棋都应该知道的) 
4:黑将走一步可能会将红子吃掉。

原博客:https://blog.csdn.net/to_be_better/article/details/49956841

代码如下:

#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <set>
#include <stack>
#include <stdlib.h>
#include <time.h>using namespace std;
//grhcint dx[] = {-1,0,0,1};
int dy[] = {0,1,-1,0};
int tx[20];
int ty[20];
int f[20][20] = {};bool ischeck(int x, int y, int n)
{for(int i=0;i<n;i++){if(tx[i] == x && ty[i] == y)continue;if(f[tx[i]][ty[i]] == 'G' ||f[tx[i]][ty[i]] == 'R'){if(x == tx[i]){int num = 0;for(int j = min(y, ty[i])+1;j<max(y, ty[i]);j++){if(f[x][j] != 0)++num;}if(num == 0)return true;}if(y == ty[i]){int num = 0;for(int j = min(x, tx[i])+1;j<max(x, tx[i]);j++){if(f[j][y] != 0)++num;}if(num == 0)return true;}}if(f[tx[i]][ty[i]] == 'C'){if(x == tx[i]){int num = 0;for(int j = min(y, ty[i])+1;j<max(y, ty[i]);j++){if(f[x][j] != 0)++num;}if(num == 1)return true;}if(y == ty[i]){int num = 0;for(int j = min(x, tx[i])+1;j<max(x, tx[i]);j++){if(f[j][y] != 0)++num;}if(num == 1)return true;}}if(f[tx[i]][ty[i]] == 'H'){if(abs(tx[i]-x) == 2 && abs(ty[i]-y) == 1){if(tx[i] > x && f[tx[i]-1][ty[i]] == 0)return true;if(tx[i] < x && f[tx[i]+1][ty[i]] == 0)return true;}if(abs(tx[i]-x) == 1 && abs(ty[i]-y) == 2){if(ty[i] > y && f[tx[i]][ty[i]-1] == 0)return true;if(ty[i] < y && f[tx[i]][ty[i]+1] == 0)return true;}}}return false;
}int main()
{int n,x,y;while(cin>>n>>x>>y){if(!n && !x && !y)break;memset(f, 0, sizeof(f));int bx=0, by=0;for(int i=0;i<n;i++){char ch;int a,b;cin>>ch>>a>>b;tx[i] = a;ty[i] = b;f[a][b] = ch;//cout<<"saa"<<f[a][b]<<endl;if(ch == 'G'){bx = a;by = b;}}bool ff = false;if(y == by){ff = true;int l = min(bx, x) + 1;int r = max(bx, x);while(l < r){if(f[l][y] != 0){ff = false;break;}++l;}}if(ff){cout<<"NO"<<endl;continue;}int i;for(i=0;i<4;i++){if(x+dx[i]>=1 && x+dx[i]<=3&& y+dy[i]>=4 && y+dy[i]<=6){//cout<<x+dx[i]<<" "<<y+dy[i]<<endl;if(!ischeck(x+dx[i], y+dy[i], n))break;}}if(i == 4)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;
}

UVA - 1589 Xiangqi (象棋)相关推荐

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

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

  2. UVA 1589 Xiangqi——模拟

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

  3. uva 1589 - Xiangqi

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

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

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

  5. UVA 1589 象棋

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

  6. 象棋 UVA 1589

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

  7. Xianqi UVa 1589

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

  8. UVA 1589 java

    import java.util.*;class Main2 {static char[][] cb=new char[12][10];//放置所有棋子的棋盘static char[][] ab=ne ...

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

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

  10. dir命令只显示文件名

    dir /b 就是ls -f的效果 1057 -- FILE MAPPING_web_archive.7z 2007 多校模拟 - Google Search_web_archive.7z 2083 ...

最新文章

  1. 怎么自学python编程-怎么自学python?
  2. Oracle编程入门经典 第1章 了解Oracle
  3. java文件上传控件_java实现大文件上传控件
  4. ArcGIS For Flex学习之Mapping---Add LODs for extra zooming
  5. 社交网络分析算法应用,社交网络分析算法
  6. SAP-MM MRP类型详解
  7. python天涯帖子_Python爬虫实战(二):爬取天涯帖子(只看楼主)
  8. Invalid MEX-file '/xxx/lk.mexa64': /xxx/anaconda3/lib/./libharfbuzz.so.0: undefined symbol: FT_Done_
  9. 苹果手机白屏_为什么安卓用久了会卡顿,苹果用久了会闪退?看完长知识了
  10. 细则从哈利·波特与来自您好麻雀船长
  11. app中加载h5页面白屏问题
  12. 2020年测绘资质申请流程
  13. CMMI有哪几个级别,每个级别有哪些其特征
  14. 河南理工大学 计算机 研究生就业,河南理工大学好就业吗?附河南理工大学就业率最高的专业名单...
  15. 前端——css盒模型
  16. git:使用git cherry-pick命令
  17. 2020Android开发常用的开源框架、开源库
  18. 二陈丸配什么吃不上火_二陈丸二妙丸搭配吃要吃多久 二陈丸有什么注意事项...
  19. 《惢客创业日记》2021.06.21-22(周一)创业者融资成本有多高?
  20. Cubase v5.1.1 macOS (移植版)音乐制作软件下载

热门文章

  1. Zynga发布魔法三消手游《Harry Potter: Puzzles Spells》
  2. Java 三个枪手游戏
  3. Android-java.net.SocketException: Socket closed问题
  4. Flutter(十七) 实现国际化
  5. c语言 gets getc,6.16 C语言,getchar gets getc有什么区别 分别是表示什么的
  6. Java计算当前时间,结合时区
  7. ad中使用智能粘贴_ADAS/AD专题1万字讲透量产智能驾驶系统方案
  8. 计算机应用专业毕业感言,大学毕业感言一句话
  9. 车辆ECU综合测试系统研究
  10. URP——后期处理特效——通道混合器Channel Mixer