uva 1589 xiangqi
来源:互联网 发布:股票交易策略 知乎 编辑:程序博客网 时间:2024/04/28 21:54
大体思路就是红方上下左右四个方向各走一步,看看是否会被吃掉。如果都会被吃,就是被将死,输出YES,否则输出YES。
#include<stdio.h> #include<string.h> #define max 15 const int horse_x[max]={1,2,-1,-2,1,2,-1,-2}; //用数组模拟马的行走const int horse_y[max]={2,1,-2,-1,-2,-1,2,1}; const int dx[max] = {1,0,-1,0}; //用数组模拟车和炮的行走const int dy[max] = {0,1,0,-1}; struct redflag{ char c; int x, y; } red[max]; int black_x, black_y, T; char qi[max][max]; char readchar() { while(1){ char c; c = getchar(); if(c == 'R' || c == 'C' || c == 'G' || c == 'H') return c; } } int feijiang(int x, int y) { int temp, i; for(i = x + 1,temp = -1; i <= 10; i++) { if(qi[i][y] != 0) temp++; if(qi[i][y] == 'G' && temp == 0) return 1; } return 0; } int panduan_H(int x, int y) //判断马{ int i; for(i = 0; i < 8; i++) if(x + horse_x[i] > 0 && y + horse_y[i] > 0 && qi[x + horse_x[i]][y + horse_y[i]] == 'H') //判断马能否吃掉将以及蹩马腿的情况 { if(horse_x[i] == 2 && qi[x + 1][y + horse_y[i]] == 0) return 1; if(horse_x[i] == -2 && qi[x - 1][y + horse_y[i]] == 0) return 1; if(horse_y[i] == -2 && qi[x + horse_x[i]][y - 1] == 0) return 1; if(horse_y[i] == 2 && qi[x + horse_x[i]][y + 1] == 0) return 1; } return 0; } int panduan(int x, int y) //总判断,其中包含了判断飞将和马的函数{ if(feijiang(x,y))return 1; int i, j, temp; for(i = 0; i < 4; i++){ temp = 0; for(j = 1; j <= 10; j++) { if(qi[x+dx[i]*j][y+dy[i]*j] != 0 && x+dx[i]*j>=1 && x+dx[i]*j<=10 && y+dy[i]*j>=1 && y+dy[i]*j<=9) temp++; if(temp == 1 && qi[x+dx[i]*j][y+dy[i]*j] == 'R') return 1; if(temp == 2 && qi[x+dx[i]*j][y+dy[i]*j] == 'C') return 1; } } if(panduan_H(x,y))return 1; return 0; } int main() { int i; while(~scanf("%d%d%d",&T, &black_x, &black_y) && T){ memset(qi,0,sizeof(qi)); for(i = 1; i <= T; i++) {red[i].c = readchar(); scanf("%d%d",&red[i].x, &red[i].y); qi[red[i].x][red[i].y] = red[i].c; } int temp1 = 0; for(i = black_x+1; i <= 10; i++) //判断第一步是否飞将 { if(qi[i][black_y] != 0) temp1++; if(qi[i][black_y] == 'G' && temp1 == 1) break; } if(qi[i][black_y] == 'G' && temp1 == 1) { qi[i][black_y] = 0; printf("NO\n"); continue; } if(black_x > 1){ if(!panduan(black_x-1,black_y)) { printf("NO\n"); continue; } } if(black_x < 3){ if(!panduan(black_x+1,black_y)){ printf("NO\n"); continue; } } if(black_y < 6){ if(!panduan(black_x,black_y+1)){ printf("NO\n"); continue; } } if(black_y > 4){ if(!panduan(black_x,black_y-1)){ printf("NO\n"); continue; } } printf("YES\n"); } return 0; }
1 0
- uva 1589 - Xiangqi
- UVa 1589 - Xiangqi
- UVa 1589 - Xiangqi
- UVA-1589Xiangqi
- UVA - 1589 Xiangqi (模拟)
- Uva 1589 Xiangqi
- Uva - 1589 - Xiangqi
- uva 1589Xiangqi
- UVA 1589 Xiangqi
- UVA - 1589 Xiangqi (象棋)
- uva 1589 xiangqi
- (模拟) uva 1589 Xiangqi
- UVa 1589 Xiangqi
- UVa 1589 Xiangqi
- Uva 1589 xiangqi
- UVA 1589 xiangqi
- UVa 1589Xiangqi(模拟 HDU4121)
- uva 1589 Xiangqi 模拟题
- 各种刷题网址
- Bitmap的简单保存
- automake manul
- IOS学习开发路线图
- Linux下 tomcat/mysql相关
- uva 1589 xiangqi
- 详细讲述python自省函数getattr的用法
- The request sent by the client was syntactically incorrect ()问题
- 2015-12-7 15:29:40
- 1052. Linked List Sorting (25)【链表+排序】——PAT (Advanced Level) Practise
- 【Leetcode】Find the Duplicate Number
- 如何从官网下载最新的jdk API
- How to use NQ logs to check data in DB
- 如何正确获得Android内外SD卡路径