UVA-1589 Xiangqi
2015-03-05 01:44
423 查看
以前做的题,写的丑,肯定可以优化,但是做过的题不想再看了,直接粘代码。
[code]#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; int f[11][10]={},ri[41]={},rj[41]={}; int num,bi,bj; char c[41]={}; int judge(int i,int j); int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(cin>>num>>bi>>bj) { if(num==0&&bi==0&&bj==0) break; memset(f,0,sizeof(f)); memset(ri,0,sizeof(ri)); memset(rj,0,sizeof(rj)); for(int i=1;i<=num;i++) { cin>>c[i]>>ri[i]>>rj[i]; f[ri[i]][rj[i]]=i; } int flag=0; if(bi-1>=1&&!flag) flag=judge(bi-1,bj); if(bi+1<=3&&!flag) flag=judge(bi+1,bj); if(bj-1>=4&&!flag) flag=judge(bi,bj-1); if(bj+1<=6&&!flag) flag=judge(bi,bj+1); if(flag==1) cout<<"NO"<<endl; else cout<<"YES"<<endl; string s; getline(cin,s); } } int judge(int x,int y) { if(f[x][y]!=0) { c[f[x][y]]=' '; f[x][y]=-1; } for(int i=1;i<=num;i++) { if(c[i]=='G') { if(rj[i]==y) { int sum=0; for(int ii=bi+1;ii<=ri[i]-1;ii++) { if(f[ii][y]>0) sum++; } if(sum==0) return 0; } } if(c[i]=='R') { if(ri[i]==x) { int sum=0; if(rj[i]<y-1) { for(int ii=rj[i]+1;ii<=y-1;ii++) { if(f[x][ii]>0) sum++; } } else if(rj[i]>y+1) { for(int ii=y+1;ii<=rj[i]-1;ii++) { if(f[x][ii]>0) sum++; } } if(sum==0) return 0; } else if(rj[i]==y) { int sum=0; if(ri[i]<x-1) { for(int ii=ri[i]+1;ii<x-1;ii++) { if(f[ii][y]>0) sum++; } } else if(ri[i]>x+1) { for(int ii=x+1;ii<=ri[i]-1;ii++) { if(f[ii][y]>0) sum++; } } if(sum==0) return 0; } } if(c[i]=='H') { if(f[ri[i]-1][rj[i]]==0) { if((x==ri[i]-2)&&(y==rj[i]+1||y==rj[i]-1)) return 0; } if(f[ri[i]+1][rj[i]]==0) { if((x==ri[i]+2)&&(y==rj[i]+1||y==rj[i]-1)) return 0; } if(f[ri[i]][rj[i]-1]==0) { if((y==rj[i]-2)&&(x==ri[i]+1||x==ri[i]-1)) return 0; } if(f[ri[i]][rj[i]+1]==0) { if((y==rj[i]+2)&&(x==ri[i]+1||x==ri[i]-1)) return 0; } } if(c[i]=='C') { if(ri[i]==x) { int sum=0; if(rj[i]<y-1) { for(int ii=rj[i]+1;ii<=y-1;ii++) { if(f[x][ii]>0) sum++; } } else if(rj[i]>y+1) { for(int ii=y+1;ii<=rj[i]-1;ii++) { if(f[x][ii]>0) sum++; } } if(sum==1) return 0; } else if(rj[i]==y) { int sum=0; if(ri[i]<x-1) { for(int ii=ri[i]+1;ii<x-1;ii++) { if(f[ii][y]>0) sum++; } } else if(ri[i]>x+1) { for(int ii=x+1;ii<=ri[i]-1;ii++) { if(f[ii][y]>0) sum++; } } if(sum==1) return 0; } } } return 1; }
相关文章推荐
- UVA 1589 Xiangqi(仔细的模拟)
- UVa 1589 Xiangqi(模拟 HDU4121)
- 紫书章四 Xiangqi UVA - 1589
- UVa 1589 象棋 xiangqi 问题。 判断是否将军致死。
- 紫书章四 Xiangqi UVA - 1589
- 紫书章四 Xiangqi UVA - 1589
- UVA 1589 xiangqi
- 算法竞赛入门经典第四章习题4-1 Xiangqi UVA - 1589
- UVa 1589 - Xiangqi <细节基础题>
- 紫书章四 Xiangqi UVA - 1589
- UVa 1589 - Xiangqi
- Uva 1589 Xiangqi
- UVa 1589 - Xiangqi <细节基础题>
- 紫书章四 Xiangqi UVA - 1589
- UVA 1589 Xiangqi
- uva 1589 - Xiangqi(象棋)
- 紫书章四 Xiangqi UVA - 1589
- uva 1589 - Xiangqi
- 紫书章四 Xiangqi UVA - 1589
- UVa1589 - Xiangqi