hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
来源:互联网 发布:无间道刘建明知乎 编辑:程序博客网 时间:2024/05/18 13:44
这题去年uva做过,做的我差点把电脑砸了。。。
现在虽然比那时强点,但还是花了不少时间。
一看见代码长的就不敢打有木有?我已经尽量少用数组下标了,不然代码一片混乱,长代码恐惧症有木有?
进入正题,马最好处理,条件对角线就好。车和炮都需要判断4个方向,而且攻击范围遇到一个子就停止,相对炮要麻烦点。帅就是车的垂直简化版(我还是有一点象棋基础的哦呵呵~,然而并没有什么卵用)。细节处理了好久,题目上的样例可以了就交,果断WA。后来从别人那里找了点测试数据,原来是炮和马的问题。刚开始我是边输入棋子边处理,可是这样就会发现假如炮可以憋马腿,但炮在马之后输入,这样就无法判断。不得已只好用结构体(噗),先存起来再判断,好在数据量不大。。。
现在看看这200多行的代码,依旧渗人。少壮不努力,老大做模拟啊。。。要不是现在做出来了,我估计又把电脑砸了
#include <stdio.h>#include <algorithm>#include <iostream>#include <queue>#include <cmath>#include <ctype.h>#include <string.h>using namespace std;const int N = 20000;const int INF = 1000000;char vis[11][10];//表示放过子的地方char Map0[11][10]; //表示可以走的地方int flag;struct node{ int x0, y0; char chess[5];}f[15];char Map[11][10] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0}};void R(int x, int y){ for(int i = x + 1; i <= 11; i ++) { int flag = 1; Map0[i][y] = 0; if(vis[i][y]) { flag = 0; } if(flag == 0) break; } for(int i = x - 1; i >= 0; i --) { int flag = 1; Map0[i][y] = 0; if(vis[i][y]) { flag = 0; } if(flag == 0) break; } for(int i = y + 1; i <= 10; i ++) { int flag = 1; Map0[x][i] = 0; if(vis[x][i]) { flag = 0; } if(flag == 0) break; } for(int i = y - 1; i >= 0; i --) { int flag = 1; Map0[x][i] = 0; if(vis[x][i]) { flag = 0; } if(flag == 0) break; }}void H(int x, int y) //没问题{ if(!vis[x + 1][y]) { Map0[x + 2][y + 1] = Map0[x + 2][y - 1] = 0; } if(!vis[x - 1][y]) { Map0[x - 2][y + 1] = Map0[x - 2][y - 1] = 0; } if(!vis[x][y + 1]) { Map0[x + 1][y + 2] = Map0[x - 1][y + 2] = 0; } if(!vis[x][y - 1]) { Map0[x + 1][y - 2] = Map0[x - 1][y - 2] = 0; }}void C(int x, int y)//ok{ for(int i = x + 1; i <= 11; i ++) { int flag = 1; if(vis[i][y]) { for(int j = i + 1; j <= 11; j ++) { Map0[j][y] = 0; if(vis[j][y]) { flag = 0; break; } } } if(flag == 0) break; } for(int i = x - 1; i >= 0; i --)//ok { int flag = 1; if(vis[i][y]) { for(int j = i - 1; j >= 0; j --) { Map0[j][y] = 0; if(vis[j][y]) { flag = 0; break; } } } if(flag == 0) break; } for(int i = y + 1; i <= 10; i ++) { int flag = 1; if(vis[x][i]) { for(int j = i + 1; j <= 10; j ++) { Map0[x][j] = 0; if(vis[x][j]) { flag = 0; break; } } } if(flag == 0) break; } for(int i = y - 1; i >= 0; i --) { int flag = 1; if(vis[x][i]) { for(int j = i - 1; j >= 0; j --) { Map0[x][j] = 0; if(vis[x][j]) { flag = 0; break; } } } if(flag == 0) break; }}void G(int x, int y){ for(int i = x + 1; i <= 11; i ++) { int flag = 1; Map0[i][y] = 0; if(vis[i][y]) { flag = 0; } if(flag == 0) break; } for(int i = x - 1; i >= 0; i --) { int flag = 1; Map0[i][y] = 0; if(vis[i][y]) { flag = 0; } if(flag == 0) break; }}int main(){ // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); int n, x, y; char ord[10]; while(~scanf("%d%d%d", &n, &x, &y) && n && x && y) { memset(Map0, 0, sizeof(Map0)); for(int i = 0; i <= 11; i ++) { for(int j = 0; j <= 10; j ++) { Map0[i][j] = Map[i][j]; } } memset(vis, 0, sizeof(vis)); int k = 0; for(int i = 0; i < n; i ++) { cin >> f[i].chess; scanf("%d%d", &f[i].x0, &f[i].y0); vis[f[i].x0][f[i].y0] = 1; // ord[k ++] = f[i].chess[0]; } for(int i = 0; i < n; i ++) { if(f[i].chess[0] == 'R') { R(f[i].x0, f[i].y0); } else if(f[i].chess[0] == 'H') { H(f[i].x0, f[i].y0); } else if(f[i].chess[0] == 'C') { C(f[i].x0, f[i].y0); } else if(f[i].chess[0] == 'G') { G(f[i].x0, f[i].y0); } } /* for(int i = 0; i <= 10; i ++) { for(int j = 0; j <= 9; j ++) { printf("%d ", Map0[i][j]); } printf("\n"); } printf("\n");*/ if(Map0[x + 1][y] == 0 && Map0[x - 1][y] == 0 && Map0[x][y + 1] == 0 && Map0[x][y - 1] == 0) printf("YES\n"); else printf("NO\n"); // printf("\n"); } return 0;}
0 0
- hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
- BFS、模拟:UVa1589/POJ4001/hdu4121-Xiangqi
- HDU4121 UVa1589 Xiangqi 解题报告
- hdu4121/poj 4001 Xiangqi(模拟)
- 【HDU4121】Xiangqi模拟象棋checkmate
- UVa 1589Xiangqi(模拟 HDU4121)
- POJ4001/HDU4121 Xiangqi 大模拟
- hdu4121 xiangqi
- hdu4121 xiangqi
- hdu4121 Xiangqi
- Uva1589 - Xiangqi
- 象棋(Xiangqi, uva1589)
- hdu 4121 Xiangqi(模拟)
- Xiangqi
- UVA1589(HDU4121)
- 象棋 (Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589)
- 象棋 (Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589)
- HDU 4121 Xiangqi (算是模拟吧)
- 当前日志损坏(ACTIVE,CURRENT),数据库正常关闭
- 内存优化
- Linux系统下的软件安装方式
- Shell基础(五):条件判断与流程控制
- QML中Column的使用及示例
- hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
- 斐波那契数列V(原创题)
- librtmp 时间戳超过 0xffffff时,FMS掉连接
- Android Material Design(4) CoordinatorLayout,AppBarLayout,Toolbar以及TabLayout的使用
- 2015年大二上-数据结构-内部排序-(2)-希尔排序
- [LeetCode]154. Find Minimum in Rotated Sorted Array II
- Java的各种操作
- VC++与Matlab混合编程之引擎操作详解
- QML中Grid定位器