【UVA 1589 --- Xiangqi】

题目来源:点击进入【UVA 1589 — Xiangqi】

解题思路

首先用str数组标记所有存在红方棋子的位置,然后通过vis数组标记所有红方棋子能走到的位置。
最后判断黑方将是否被将死(没法走)。

注意:
因为黑子可以吃子,所以需要考虑当能不能吃的问题,所以需要标记不能吃的子。

AC代码:

#include <stdio.h>
#include <string.h>
const int MAXN = 15;
char str[MAXN][MAXN];
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int ma[4][4]={{-1,1,1,1},{-1,-1,1,-1},{-1,1,-1,-1},{1,1,1,-1}};
int xx[MAXN],yy[MAXN];
char type[MAXN];
bool vis[MAXN][MAXN];
//帅和车
void fun1(int a,int b)
{for(int i=0;i<4;i++){int x=a+dir[i][0];int y=b+dir[i][1];while(x>=1 && x<=10 && y>=1 && y<=9 && str[x][y]==' '){vis[x][y]=true;x+=dir[i][0];y+=dir[i][1];}if(x>=1 && x<=10 && y>=1 && y<=9)  vis[x][y]=true;}
}
//马
void fun2(int a,int b)
{for(int i=0;i<4;i++){int x=a+dir[i][0];int y=b+dir[i][1];if(x>=1 && x<=10 && y>=1 && y<=9 && str[x][y]==' '){vis[x+ma[i][0]][y+ma[i][1]]=true;vis[x+ma[i][2]][y+ma[i][3]]=true;}}
}
//炮
void fun3(int a,int b)
{for(int i=0;i<4;i++){int x=a+dir[i][0];int y=b+dir[i][1];while(x>=1 && x<=10 && y>=1 && y<=9 && str[x][y]==' '){x+=dir[i][0];y+=dir[i][1];}if(x>=1 && x<=10 && y>=1 && y<=9){x+=dir[i][0];y+=dir[i][1];while(x>=1 && x<=10 && y>=1 && y<=9 && str[x][y]==' '){vis[x][y]=true;x+=dir[i][0];y+=dir[i][1];}if(x>=1 && x<=10 && y>=1 && y<=9) vis[x][y]=true;}}
}
//判断
bool compare(int a,int b)
{for(int i=0;i<4;i++){int x=a+dir[i][0];int y=b+dir[i][1];if(x>=1 && x<=3 && y>=4 && y<=6 && !vis[x][y]) return false;}return true;
}int main()
{int x,y,n;while (~scanf("%d%d%d",&n,&x,&y), n){memset(vis,false,sizeof(vis));memset(str,' ',sizeof(str));for(int i=0;i<n;i++){scanf(" %c %d %d",&type[i],&xx[i],&yy[i]);str[xx[i]][yy[i]]='@';}for(int i=0;i<n;i++){if(type[i]=='G' || type[i]=='R') fun1(xx[i],yy[i]);else if(type[i]=='H') fun2(xx[i],yy[i]);else if(type[i]=='C') fun3(xx[i],yy[i]);}if (compare(x,y)) printf("YES\n");else printf("NO\n");}return 0;
}

【UVA 1589 --- Xiangqi】相关推荐

  1. 【UVA 815 --- Flooded!】

    [UVA 815 --- Flooded!] 题目来源:点击进入[UVA 815 - Flooded!] Description To enable homebuyers to estimate th ...

  2. UVA - 1589 ​​​​​​​Xiangqi

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

  3. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  4. UVA 1589 Xiangqi——模拟

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

  5. uva 1589 - Xiangqi

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

  6. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. 【UVA 12657】移动盒子 Boxes in a Line

    [UVA 12657]移动盒子 Boxes in a Line 洛谷题目地址 [题意] 一行有n 个盒子,从左到右编号为1-n.模拟以下4种命令. 1 X Y :将盒子X 移动到Y 的左侧(如果X 已 ...

  8. 【UVA】 133 --- The Dole Queue

    [UVA] 133 --- The Dole Queue In a serious attempt to downsize (reduce) the dole queue, The New Natio ...

  9. 【POJ No. 1577 / UVA No. 1525】落叶 Falling Leaves

    [POJ No. 1577 / UVA No. 1525]落叶 Falling Leaves POJ题目地址 [题意] 一棵字母二叉树如下图所示. 一棵字母二叉树可以是两者之一: ①空树: ②有一个根 ...

  10. 【UVA/Codeforces】1584 Circular Sequence / 792B Counting-out Rhyme(就是一个圈儿...)

    https://vjudge.net/problem/UVA-1584 1584 Circular Sequence 输入一个字符串,可以以字符串中任意一个字母作为起始,输出字典序最小的那个字符串 两 ...

最新文章

  1. 简单介绍vue获取token实现token登录的示例代码
  2. An Error Correction and DeNovo Assembly Approach for Nanopore Reads Using Short Reads
  3. fireworks做图的最高长度
  4. 单行子查询 多行子查询 关联子查询 笔记
  5. 推荐周立功先生的一本书
  6. 河南大学计算机与信息工程学院张磊,张磊-食品与生物工程学院
  7. MongoDB 数据集合导出 与 导入
  8. OpenGL的几何变换[转]
  9. 9个最常用的python深度学习库
  10. 分布式:分布式系统的设计
  11. SpreadJS 15.2 英文版-Crack
  12. 计算机网络原理(3)数据编码技术
  13. 好家伙,花了一个月时间写了个网易云,以后再也不用充VIP了!
  14. 基于python的图像灰度值处理(opencv)
  15. shell脚本编程大全
  16. 揭秘:传统pos机手续费为什么比无卡支付手续费还贵!
  17. 数的相关概念——数码、位数、基数、位权
  18. EJB2.0教程 详解EJB技术及实现原理
  19. 小信号放大电路的频率特性
  20. linux devel包 和 非devel包的区别

热门文章

  1. socket closed
  2. IIS站点出现503错误。
  3. AMD显卡更新UEFI GOP
  4. 在ubuntu 的QT中不能使用搜狗输入法
  5. 【Flink】(03)Apache Flink 漫谈系列 —— Flink 1.11 Unaligned Checkpoint 解析
  6. 芥末圈:“知识付费”面具下的币圈割韭菜大本营
  7. RoCEv2 无损队列缓存
  8. 计算机设计大赛感言,电子设计大赛获奖感言精选
  9. arcmap10.7打开tif文件一片空白 | 解决方法
  10. 电商如何抢占“双十一”?试试自动化仓库机器人 | 行业