UVa 1589 - Xiangqi
2014-10-30 00:02
369 查看
残局能否将死的题,建了两个数组标记做的,WA了好多次,循环中的数出现过错误,还有一开始不知道中国象棋将只能直走,以为和国际象棋一样,可以斜着走,也错了好几次。以后要注意循环的开始与结束去值是否正确。
#include<iostream> #include<cstdlib> #include<cstring> #define maxn 15 using namespace std; int main() { char a[maxn][maxn],p[maxn][maxn],x; int b,c,n,y,z; cin>>n>>b>>c; while(n&&b&&c) { b--; c--; int w=0; memset(a,0,sizeof(a)); memset(p,0,sizeof(p)); for(int i=0;i<3;i++) { for(int j=3;j<6;j++) { if(abs(b-i)<=1&&c==j) w++; else if(b==i&&abs(c-j)<=1) w++; } } for(int i=0;i<n;i++) { cin>>x>>y>>z; a[y-1][z-1]=x; } for(int i=0;i<maxn;i++) { for(int j=0;j<maxn;j++) { if(a[i][j]=='G') { for(int k=i-1;k>=0;k--) { if(!a[k][j]) p[k][j]='X'; else { p[k][j]='X'; break; } } } else if(a[i][j]=='R') { for(int k=i-1;k>=0;k--) { if(!a[k][j]) p[k][j]='X'; else { p[k][j]='X'; break; } } for(int k=i+1;k<=maxn;k++) { if(!a[k][j]) p[k][j]='X'; else { p[k][j]='X'; break; } } for(int k=j-1;k>=0;k--) { if(!a[i][k]) p[i][k]='X'; else { p[i][k]='X'; break; } } for(int k=j+1;k<=maxn;k++) { if(!a[i][k]) p[i][k]='X'; else { p[i][k]='X'; break; } } } else if(a[i][j]=='H') { if(i-2>=0&&!a[i-1][j]) { if(j-1>=0) p[i-2][j-1]='X'; if(j+1<=maxn) p[i-2][j+1]='X'; } if(i+2<=maxn&&!a[i+1][j]) { if(j-1>=0) p[i+2][j-1]='X'; if(j+1<=maxn) p[i+2][j+1]='X'; } if(j-2>=0&&!a[i][j-1]) { if(i-1>=0) p[i-1][j-2]='X'; if(i+1<=maxn) p[i+1][j-2]='X'; } if(j+2<=maxn&&!a[i][j+1]) { if(i-1>=0) p[i-1][j+2]='X'; if(i+1<=maxn) p[i+1][j+2]='X'; } } else if(a[i][j]=='C') { int t=0; for(int k=i-1;k>=0;k--) { if(!t) { if(a[k][j]) t=1; } else { if(!a[k][j]) p[k][j]='X'; else { p[k][j]='X'; break; } } } t=0; for(int k=i+1;k<=maxn;k++) { if(!t) { if(a[k][j]) t=1; } else { if(!a[k][j]) p[k][j]='X'; else { p[k][j]='X'; break; } } } t=0; for(int k=j-1;k>=0;k--) { if(!t) { if(a[i][k]) t=1; } else { if(!a[i][k]) p[i][k]='X'; else { p[i][k]='X'; break; } } } t=0; for(int k=j+1;k<=maxn;k++) { if(!t) { if(a[i][k]) t=1; } else { if(!a[i][k]) p[i][k]='X'; else { p[i][k]='X'; break; } } } } } } for(int i=0;i<3;i++) { for(int j=3;j<6;j++) { if(p[i][j]=='X') { if(abs(b-i)<=1&&c==j) w--; else if(b==i&&abs(c-j)<=1) w--; } } } if(!w) cout<<"YES"<<endl; else cout<<"NO"<<endl; cin>>n>>b>>c; } return 0; }
相关文章推荐
- (模拟) uva 1589 Xiangqi
- Xiangqi UVA - 1589
- hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
- UVA - 1589 Xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)
- uva 1589 Xiangqi 模拟题
- [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)
- UVA-1589 Xiangqi
- uva 1589 xiangqi
- Uva - 1589 - Xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)
- UVA-1589 Xiangqi
- UVA 1589 Xiangqi——模拟
- Uva - 1589 - Xiangqi
- Problem 023 ——UVa 1589 - Xiangqi
- UVA 1589 Xiangqi 直接模拟 提交了近50次要跪。。
- 紫书章四习题一 xiangqi uva 1589(模拟)
- UVA - 1589 Xiangqi (模拟)
- Xiangqi UVA - 1589