题意:

给出一个黑方的将, 然后 红方有 2 ~ 7 个棋子, 给出摆放位置,问是否已经把黑将将死, 红方已经将军。

分析:

分情况处理, 车 马 炮, 红将情况跟车是一样的。

建一个数组board保存棋局, 然后建一个数组moveable用来算出黑将当前位置能走的格子(1可走, 0不可走, 一开始都是1), 判断一下黑将上下左右四个方位是否能走, 而且走了之后算一下当前位置moveable是否0即可。

代码:

 #include <bits/stdc++.h>
using namespace std;
int N, bx, by;
int board[][];
int tboard[][];
int movable[][];
struct CHESS
{
char name;
int x, y;
}chess[];
void Chariot(int x, int y){
for(int i = x - ; i >= ; i--){
movable[i][y] = ;
if(tboard[i][y] && tboard[i][y] != 'B')
break;
}
for(int i = x + ; i <= ; i++){
movable[i][y] = ;
if(tboard[i][y] && tboard[i][y] != 'B')
break;
}
for(int i = y + ; i <= ; i++){
movable[x][i] = ;
if(tboard[x][i] && tboard[x][i] != 'B')
break;
}
for(int i = y - ; i >= ; i --){
movable[x][i] = ;
if(tboard[x][i] && tboard[x][i] != 'B')
break;
}
}
void Cannon(int x, int y)
{
for(int i = x - ; i >= ; i --){
if(tboard[i][y] && tboard[i][y] != 'B'){
for(int j = i - ; j >= ; j--){
movable[j][y] = ;
if(tboard[j][y] && tboard[j][y] != 'B')
break;
}
break;
}
}
for(int i = x + ; i <= ; i++){
if(tboard[i][y] && tboard[i][y] != 'B'){
for(int j = i+; j <= ; j++){
movable[j][y] = ;
if(tboard[j][y] && tboard[j][y] != 'B')
break;
}
break;
}
}
for(int i = y - ; i >= ; i--){
if(tboard[x][i] && tboard[x][i] != 'B'){
for(int j = i - ; j >= ; j--){
movable[x][j] = ;
if(tboard[x][j] && tboard[j][y] != 'B')
break;
}
break;
}
} for(int i = y + ; i <= ; i++){
if(tboard[x][i] && tboard[x][i] != 'B'){
for(int j = i + ; j <= ; j++){
movable[x][j] = ;
if(tboard[x][j] && tboard[j][y] != 'B')
break;
}
break;
}
} }
int dir[][] = {{-,},{,},{,},{,-}};//上右下左
int dir2[][] = {{-,-},{-,},{-,},{,},{,},{,-},{,-},{-,-}};
void Horse(int x, int y)
{
for(int i = ; i < ; i++){
int tx = x, ty = y;
tx += dir[i][];
ty += dir[i][];
if(tx >= && ty >= && tx <= && ty <= );
else continue;
if(tboard[tx][ty]) continue;
tx = x; ty = y;
tx += dir2[(i+)* - ][];
ty += dir2[(i+)* - ][];
if(tx >= && ty >= && tx <= && ty <= )
movable[tx][ty] = ;
tx = x; ty = y;
tx += dir2[(i+)* - ][];
ty += dir2[(i+)* - ][];
if(tx >= && ty >= && tx <= && ty <= )
movable[tx][ty] = ;
}
}
int main()
{ while(scanf("%d %d %d", &N, &bx, &by) != EOF){
if(N == ) break;
memset(board, , sizeof(board));
board[bx][by] = 'B';
for(int i = ; i <= ; i++){
for(int j = ; j<= ; j++){
movable[i][j] = ;
}
} for(int i = ; i < N; i++){
int x, y;
char name;
scanf(" %c", &name);
scanf("%d %d", &x, &y);
board[x][y] = name;
}
int ok = ;
for(int i = ; i < ; i++)
{
int tx = bx, ty = by;
tx += dir[i][];
ty += dir[i][];
if(tx >= && tx <= && ty >= && ty <= );
else continue;
for(int k = ; k <= ; k++){
for(int j = ; j <= ; j++){
tboard[k][j] = board[k][j];
}
}
tboard[tx][ty] = 'B'; for(int k = ; k <= ; k++){
for(int j = ; j<= ; j++){
movable[k][j] = ;
}
} for(int k = ; k <= ; k++){
for(int j = ; j <= ; j++){
switch(tboard[k][j]){
case 'G':
Chariot(k,j);
break;
case 'R':
Chariot(k,j);
break;
case 'H':
Horse(k,j);
break;
case 'C':
Cannon(k,j);
break;
}
}
} if(movable[tx][ty])
ok = ;
}
printf("%s\n", ok ? "NO":"YES"); }
return ;
}

最新文章

  1. STC系列STC10F芯片解密STC10L单片机破解复制技术
  2. mysql通用包安装
  3. c语言迷宫游戏的实现
  4. TestNG运作报错An interanl error occurred during:&quot;Launching first&quot;
  5. Swift 简单介绍 - 苹果最新的编程语言
  6. 关于jsp页面转换成excel格式下载遇到问题及解决
  7. Python 3 中的json模块使用
  8. python3和grpc的微服务探索实践
  9. 论文笔记:Progressive Neural Architecture Search
  10. pyqt-QGrapicsView类
  11. TP5.0+小程序商城构建(1)
  12. tedu训练营day01
  13. 装饰者模式在JDK和Mybatis中是怎么应用的? java io包
  14. 解决java.lang.IllegalArgumentException: No converter found for return value of type 的问题
  15. 面试官说:说一说CommonJs的实现原理
  16. 学习MongoDB 三: MongoDB无法启动的解决方法
  17. 【BI】资料收集
  18. 我是一名IT小小鸟
  19. [case]filesystem problem
  20. 马士兵老师hadoop讲解总结博客地址记录(啊啊啊啊啊,自己没有保存写好的博客...)

热门文章

  1. MFC中利用CString和Format成员函数将数字格式化输出
  2. ElasticSearch | windows 上安装ES
  3. [POI2007]四进制的天平Wag
  4. 人工智能-深度学习(3)TensorFlow 实战一:手写图片识别
  5. css超出部分显示省略号
  6. 转 【TTS】AIX平台数据库迁移到Linux--基于RMAN(真实环境)
  7. Hackonacci Matrix Rotations 观察题 ,更新了我的模板
  8. colormap画出的图不是彩色问题
  9. Node.js——异步上传文件
  10. HTML5——loading