题目:

象棋,黑棋只有将,红棋有帅车马炮。问是否死将。

思路:

对方将四个方向走一步,看看会不会被吃。

代码:

很难看……WA了很多发,还越界等等。

#include <cstdio>
#include <cstring>
#include <cstdlib> char graph[][];
int go[][] = {{,},{,},{-,},{,-}}; bool inBlackPalace(int x, int y) {
return <= y && y <= && <= x && x <= ;
} bool inChess(int x, int y) {
return <= x && x <= && <= y && y <= ;
} bool goG(int x, int y) {
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
return graph[i][y] == 'B';
}
}
return false;
} bool goR(int x, int y) {
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
if (graph[i][y] == 'B') return true;
break;
}
}
for (int i = x+; i <= ; i++) {
if (graph[i][y]) {
if (graph[i][y] == 'B') return true;
break;
}
}
for (int j = y-; j >= ; j--) {
if (graph[x][j]) {
if (graph[x][j] == 'B') return true;
break;
}
}
for (int j = y+; j <= ; j++) {
if (graph[x][j]) {
if (graph[x][j] == 'B') return true;
break;
}
}
return false;
} int can_move(int x,int y,int w)
{
if(w==) if(x<||x>||y<||y>) return ;
if(w==) if(x<||x>||y<||y>) return ;
return ;
} bool goH(int x, int y) {
for (int i = ; i < ; i++) {
int nx = x + go[i][];
int ny = y + go[i][];
if ( <= nx && nx <= && <= ny && ny <= ) {
if (graph[nx][ny] == ) {
if (inChess(nx+go[i][]+go[i][],ny+go[i][]+go[i][]))
if (graph[nx+go[i][]+go[i][]][ny+go[i][]+go[i][]] == 'B') return true; if (inChess(nx+go[i][]-go[i][],ny+go[i][]-go[i][]))
if (graph[nx+go[i][]-go[i][]][ny+go[i][]-go[i][]] == 'B') return true;
}
}
}
return false;
} bool goC(int x, int y) {
bool first = true;
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
if (first) {
first = false;
} else {
if (graph[i][y] == 'B') return true;
break;
}
}
}
first = true;
for (int i = x+; i <= ; i++) {
if (graph[i][y]) {
if (first) {
first = false;
} else {
if (graph[i][y] == 'B') return true;
break;
}
}
} first = true;
for (int j = y-; j >= ; j--) {
if (graph[x][j]) {
if (first) {
first = false;
} else {
if (graph[x][j] == 'B') return true;
break;
}
}
}
first = true;
for (int j = y+; j <= ; j++) {
if (graph[x][j]) {
if (first) {
first = false;
} else {
if (graph[x][j] == 'B') return true;
break;
}
}
}
return false;
} bool goo(int x, int y) {
switch(graph[x][y]) {
case 'G': return goG(x,y);
case 'R': return goR(x,y);
case 'H': return goH(x,y);
case 'C': return goC(x,y);
} return false;
} char ch[];
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int bx, by;
scanf("%d%d", &bx, &by);
if (n == && bx == && by == ) break; memset(graph, , sizeof(graph)); for (int i = ; i < n; i++) {
int x, y;
scanf("%s%d%d", ch, &x, &y);
graph[x][y] = ch[];
} bool flag = false;
for (int way = ; way < ; way++) {
int nx = bx + go[way][];
int ny = by + go[way][];
if (!inBlackPalace(nx, ny)) continue;
char tmp = graph[nx][ny];
graph[nx][ny] = 'B';
bool ok = true;
for (int i = ; i <= && ok; i++) {
for (int j = ; j <= && ok; j++) {
if (graph[i][j]) {
if (goo(i,j)) ok = false;
}
}
} graph[nx][ny] = tmp;
if (ok) {
flag = true;
break;
}
} puts(flag?"NO":"YES");
}
return ;
}

最新文章

  1. WinForm 代码实现以管理员身份运行
  2. 【Python】django多对多 查询 ,反查等操作
  3. Oracle存储过程java 调用
  4. unity工程接入Android sdk后真机测试解锁屏后退出的解决
  5. Android+struts2+JSON方式的手机开发(Login)
  6. mxml日期显示使用
  7. js手写图片查看器(图片的缩放、旋转、拖拽)
  8. Web 前端代码规范
  9. Spring两种代理区别
  10. 在 Arch 下编译 OpenWRT cmcurl 问题与解决方案
  11. mysql 安装 linux系统下
  12. Object的所有方法
  13. [UnityShader基础]06.#pragma multi_compile
  14. php 守护进程(Daemon)
  15. CentOS随笔——关机命令
  16. npm run dev 在Linux上持久运行
  17. Java IO(四)——字符流
  18. redis4.X
  19. C# Task的GetAwaiter和ConfigureAwait
  20. MYSQL中动态行数据转列数据

热门文章

  1. Python os.walk() 简介
  2. P2680 运输计划(二分+树上差分)
  3. Postman-CI集成Jenkins(3)
  4. 《Cracking the Coding Interview》——第11章:排序和搜索——题目7
  5. 去掉referer信息
  6. 记录下MoKee编译过程
  7. 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
  8. NGUI-为Popuplist的下拉选项添加删除功能
  9. Python全栈工程师(递归函数、闭包)
  10. Linux查看端口被占用情形