uva1589象棋
来源:互联网 发布:央视网络电视打不开 编辑:程序博客网 时间:2024/04/28 21:54
背景:这道题战线拉得最久,每次一到写这道题的时候都有事,导致我写了4天,调试了三个上午,wrong得我想哭,最后历时15个多小时,我终于ac了。
错因:这道题主要是有很多种情况,要考虑完所有的情况,得需要自己无限出数据。
思路:我的思路是用两个字符型数组模拟整个棋盘,一个模拟那个残局,一个模拟红方的棋子能到达的地方,即使帅模拟的地方有些是不符合象棋规则的,但是把帅当成车来用的话,在关键的地方是不会出错误的,所以我就把帅和车写成了一个函数。具体代码如下:
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;char cb[12][10],ab[12][10];void RG(int a,int b){ int c; for(c=a-1;c>=1;c--) { ab[c][b]='S'; if(cb[c][b]!='A'&&cb[c][b]!='B') break; } for(c=a+1;c<=3;c++) { ab[c][b]='S'; if(cb[c][b]!='A'&&cb[c][b]!='B') break; } for(c=b+1;c<=9;c++) { ab[a][c]='S'; if(cb[a][c]!='A'&&cb[a][c]!='B') break; } for(c=b-1;c>=1;c--) { ab[a][c]='S'; if(cb[a][c]!='A'&&cb[a][c]!='B') break; }}void H(int a,int b){ if(cb[a][b+1]=='A'&&b+2<=9&&a-1>=1) ab[a-1][b+2]='S'; if(cb[a][b+1]=='A'&&b+2<=9&&a+1<11) ab[a+1][b+2]='S'; if(cb[a][b-1]=='A'&&b-2>=1&&a-1>=1) ab[a-1][b-2]='S'; if(cb[a][b-1]=='A'&&b-2>=1&&a+1<11) ab[a+1][b-2]='S'; if(cb[a+1][b]=='A'&&b-1>=1&&a+2<11) ab[a+2][b-1]='S'; if(cb[a+1][b]=='A'&&b+1<=9&&a+2<11) ab[a+2][b+1]='S'; if(cb[a-1][b]=='A'&&b-1>=1&&a-2>=1) ab[a-2][b-1]='S'; if(cb[a-1][b]=='A'&&b+1<=9&&a-2>=1) ab[a-2][b+1]='S';}void C(int a,int b){ if(b>=4&&b<=6&&a==1) if(cb[2][b]!='A'&&cb[2][b]!='B') ab[3][b]='S'; int c,d; for(c=a-1;c>=1;c--) { if(cb[c][b]=='B') return; if(cb[c][b]!='A') break; } for(d=c-1;d>=1;d--) { ab[d][b]='S'; if(cb[d][b]!='A'&&cb[d][b]!='B') break; } for(c=b+1;c<=9;c++) { if(cb[a][c]=='B') return; if(cb[a][c]!='A') break; } for(d=c+1;d<=9;d++) { ab[a][d]='S'; if(cb[a][d]!='A'&&cb[a][d]!='B') break; } for(c=b-1;c>=1;c--) { if(cb[a][c]=='B') return; if(cb[a][c]!='A') break; } for(d=c-1;d>=1;d--) { ab[a][d]='S'; if(cb[a][d]!='A'&&cb[a][d]!='B') break; }}int judge(int i,int j){ int ok=1; if(i+1<4&&ab[i+1][j]!='S') ok=0; if(i-1>0&&ab[i-1][j]!='S') ok=0; if(j+1<7&&ab[i][j+1]!='S') ok=0; if(j-1>3&&ab[i][j-1]!='S') ok=0; return ok;}int main(void){ int n,i,j,Ch[8][3],a1,b1; while(cin>>n>>a1>>b1&&n&&a1&&b1) { memset(cb,'A',sizeof(cb)); memset(ab,'A',sizeof(ab)); memset(Ch,0,sizeof(Ch));cb[a1][b1]='B'; char ch; for(int k=0;k<n;k++) { cin>>ch>>i>>j; cb[i][j]=ch; Ch[k][0]=i;Ch[k][1]=j; } for(int m=0;m<n;m++) { int a=Ch[m][0],b=Ch[m][1]; if(cb[a][b]=='R'||cb[a][b]=='G') RG(a,b); else if(cb[a][b]=='H') H(a,b); else if(cb[a][b]=='C') C(a,b); } puts(judge(a1,b1)?"YES":"NO"); } return 0;}
3 0
- uva1589象棋
- Uva1589象棋
- 象棋(Xiangqi, uva1589)
- 习题4-1 象棋 UVa1589
- UVa1589 ACM/ICPC 2011 象棋
- 习题4-1 象棋 uva1589
- (紫书) 4-1象棋 UVa1589
- 象棋 (Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589)
- 象棋 (Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589)
- 时隔一年的再开 紫书Uva1589 象棋 模拟
- uva1589
- UVa1589
- UVa1589
- UVA1589
- 算法竞赛入门经典(第2版)习题4-1 象棋 Xiangqi UVa1589
- 算法竞赛入门经典(第2版)习题4-1 象棋UVa1589
- 算法竞赛入门经典 第二版 习题4-1 象棋 Xiangqi uva1589
- 象棋
- 灰度图像--图像增强 灰度变换
- CentOS 7 安装 OwnCloud 7 私有云盘
- 外挂辅助技术研究-完善选怪功能
- 自学数据挖掘十大算法之Apriori
- 冬令营第九天
- uva1589象棋
- live555生成库文件
- IP头、TCP头、UDP头详解以及定义
- cfree5更新C++11特性
- 基于linux系统的物联网服务器设计
- redhat6.5安装SUN JDK1.7和Tomcat7
- CodeSign error: code signing is required for product type 'Application' in SDK 'i
- H.264画质级别简介
- 如何让sublime text 2/3支持中文编码