UVa1589 象棋
就是声明两个数组,一个模拟棋局,另一个模拟黑将不能走的位置。不过写得有点长了...
#include<iostream> #include<string> using namespace std; struct Node { ]; int x, y; }a[]; ][]; //模拟棋盘棋子的情况 ][]; //模拟黑棋不能走的情况 int bh, bs; //黑色棋子的坐标 void G(int x, int y) //模拟帅棋子 { ; ; i < x; i++) { if (vis[i][y]) { flag = ; break; } } ) { cnt[][y] = ; cnt[][y] = ; cnt[][y] = ; } } void R(int x, int y) //模拟车棋子 { ; && y < ) { ; i < ; i++) { if (vis[x][i]) { flag = ; break; } } } && y>) { ; i < y; i++) { if (vis[x][i]) { flag = ; break; } } } && y <= ) { ; i < y; i++) { if (vis[i][y]) { flag = ; break; } } } ) { ) { cnt[x][] = ; cnt[x][] = ; cnt[x][] = ; } ) { cnt[][y] = ; cnt[][y] = ; cnt[][y] = ; } } } void C(int x, int y) //模拟炮棋子 { ; && y < ) { ; i < ; i++) { if (vis[x][i]) { cnt[x][] = ; cnt[x][] = ; cnt[x][] = ; break; } } } && y > ) { ; i < y; i++) { if (vis[x][i]) { cnt[x][] = ; cnt[x][] = ; cnt[x][] = ; } } } && y >= && y <= ) { ; i < x; i++) { if (vis[i][y]) { cnt[][y] = ; cnt[][y] = ; cnt[][y] = ; } } } } void H(int x, int y) //模拟马棋子 { > ) { ][y]) { > ) { cnt[x - ][y - ] = ; } < ) { cnt[x + ][y + ] = ; } } } < ) { ][y]) { > ) { cnt[x + ][y - ] = ; } < ) { cnt[x + ][y + ] = ; } } } > ) { ]) { > ) { cnt[x - ][y - ] = ; } < ) { cnt[x + ][y - ] = ; } } } < ) { ]) { > ) { cnt[x - ][y + ] = ; } < ) { cnt[x + ][y + ] = ; } } } } int _tmain(int argc, _TCHAR* argv[]) { int n; //红色棋子的个数 while (cin >> n >> bh >> bs && n) { memset(vis, , sizeof(vis)); memset(cnt, , sizeof(cnt)); ; i < n; i++) { cin >> a[i].ch >> a[i].x >> a[i].y; vis[a[i].x][a[i].y] = ; } ; i < n; i++) { ] == 'G') G(a[i].x, a[i].y); ] == 'R') R(a[i].x, a[i].y); ] == 'C') C(a[i].x, a[i].y); ] == 'H') H(a[i].x, a[i].y); } ; >) { ][bs]) flag = ; } < ) { ][bs]) flag = ; } > ) { ]) flag = ; } < ) { ]) flag = ; } ) cout << "NO" << endl; else cout << "YES" << endl; cout << endl; } ; }
UVa1589 象棋的更多相关文章
- UVA-1589 象棋(模拟)
题目:(传送门) 给出一个象棋的残局,下一步是黑棋走,判断黑棋是不是被将死. 思路: 读完这个题,知道是一个模拟题,然后想到用两个二维数组来模拟棋盘,一个(mp数组)用来存残局,一个(res数组)用来 ...
- [算法竞赛入门经典] 象棋 ACM/ICPC Fuzhou 2011, UVa1589 较详细注释
Description: Xiangqi is one of the most popular two-player board games in China. The game represents ...
- 算法习题---4-1象棋(UVa1589)
一:题目 在黑方只有一个“将”的情况下,红方只有(车.马.炮)(可以多个).帅的情况下,判断黑方是否被将死 (一)题目详解 其中棋盘按照坐标方式表示,左上角为(,),列数最大9,行数最大10 G 表示 ...
- HTML5学习总结——canvas绘制象棋(canvas绘图)
一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...
- 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)
目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...
- 简单的c#winform象棋游戏(附带源码)
算法源自网络(网络源码连接:http://www.mycodes.net/161/6659.htm) 整体思路:用二维数组构建棋盘每一个数组元素封装为一个picturebox附带若干属性(例如:棋 ...
- BZOJ 1801中国象棋 DP
1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1426 Solved: 826[Submit][ ...
- C#中国象棋+游戏大厅 服务器 + 客户端源码
来源:www.ajerp.com/bbs C#中国象棋+游戏大厅 服务器 + 客户端源码 源码开源 C#版中国象棋(附游戏大厅) 基于前人大虾的修改版 主要用委托实现 服务器支持在线人数,大厅桌数的设 ...
- 中国象棋引擎的C#源代码
以前写的中国象棋引擎的C#源程序,可在VS2010中编译运行,由于个人精力有限,难以完成后续的开发工作,如果谁感兴趣,请关注微信公众号(“申龙斌的程序人生”,ID:slbGTD),发送后台消息“象棋引 ...
随机推荐
- java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError at com.csdhsm.compiler.test.DevTest.testReadInput(DevTest.java ...
- oracle触发器的小例子
实现功能: 插入数据前触发,检查与插入数据几个属性相同的在表中的列将状态改为false,再执行插入. 解决方案: CREATE OR REPLACE TRIGGER tri_insert BEFORE ...
- JVM-对象
1.对象的创建 当虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化.如果没有,那必须先执行相应的类加 ...
- xcode 5.0 以上去掉icon高亮方法&iOS5白图标问题
之前的建议方法是把在xxx.info.plist文件中把 icon already includes gloss and bevel effects 设置YES 在Xcode5下,反复实现不成功,今天 ...
- iOS开发多线程篇—线程间的通信(转)
这里转载 给自己一个备份 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转 ...
- git——学习笔记(三)分支管理
一.创建.合并分支 每次提交,git都往后走一格,串成一跳时间线,head指向的是分支,分支指向提交.master是主分支,dev是另一条分支,分支就像指针一样,合并.删除分支时,修改的都是指针,工作 ...
- hdu1394
//Accepted 292 KB 46 ms //利用线段树求逆序数 //对于每个数看前面比他大的数有多少个,更新这个数的个数 #include <cstdio> #include &l ...
- SecureCRT下的串口无法输入
用串口配置交换机的时候,出现的问题: 用secureCRT建了一个串口COM1后,连接上开发板后,可以正确接受和显示串口的输出,但是按键输入无效. 解决方法: Session Options -> ...
- init()和deinit()
一.初始化方法(init()) 1.定义:类初始化对象时所调用的方法 2.分类: (1)默认初始化方法 (2)便利初始化方法 (3)使用闭包 3.一些注意点: (1)方法固定名为init,没有返回值, ...
- solaris下的常用命令
屏幕显示: cat输出到屏幕: more 整屏显示,b显示上一屏,f显示下一屏: head显示文件的前n行: tail显示文件的后n行: man查看命令帮助: 目录操作: 创建目录: mkdir, ...