象棋,顾名思义,大模拟...注意细节问题,然后有棋子的地方也可以是安全区,因为将可以吃子
在输入上wa了几发
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
bool mat[15][15];
bool ma[15][15];
typedef struct node{
char p;
int x,y;
};
node p[105];
void judge(node a){
int r,c;
r=a.y;
c=a.x;
if(a.p=='G'){
for(int i=r-1;i>0;i--){
mat[i][c] = 1;
if(ma[i][c]==1) break;
}
}
if(a.p=='R'){
for(int i=c+1;i<10;i++){//right
mat[r][i] = 1;
if(ma[r][i]) break;
}
for(int i=c-1;i>=1;i--){//left
mat[r][i] = 1;
if(ma[r][i]) break;
}
for(int i=r+1;i<10;i++){//down
mat[i][c] = 1;
if(ma[i][c]) break;
}
for(int i=r-1;i>=1;i--){//up
mat[i][c]=1;
if(ma[i][c]) break;
}
}
if(a.p=='C'){
bool flag=false;
for(int i=c+1;i<10;i++){//right
if(flag){
mat[r][i] = 1;
if(ma[r][i]) break;
}
if(ma[r][i]){
flag=true;
}
}
flag=false;
for(int i=c-1;i>=1;i--){//left
if(flag){
mat[r][i] = 1;
if(ma[r][i]) break;
}
if(ma[r][i]){
flag=true;
}
}
flag=false;
for(int i=r+1;i<=10;i++){//down
if(flag){
mat[i][c] = 1;
if(ma[i][c]) break;
}
if(ma[i][c]){
flag=true;
}
}
flag=false;
for(int i=r-1;i>=1;i--){//up
if(flag){
mat[i][c] = 1;
if(ma[i][c]) break;
}
if(ma[i][c]){
flag=true;
}
}
}
if(a.p=='H'){
if(!ma[r-1][c]&&r>1){
mat[r-2][c+1]=mat[r-2][c-1]=1;
}
if(!ma[r+1][c]){
mat[r+2][c+1]=mat[r+2][c-1]=1;
}
if(!ma[r][c+1]){
mat[r+1][c+2]=mat[r-1][c+2]=1;
}
if(!ma[r][c-1]&&c>1){
mat[r+1][c-2]=mat[r-1][c-2]=1;
}
}
}
int gox[4]={0,0,-1,1},goy[4]={-1,1,0,0};
int main()
{
int n,x,y,r,c;
bool flag;
while(~scanf("%d%d%d",&n,&y,&x)){
if(n==0&&x==0&&y==0) break;
flag=false;
memset(mat,0,sizeof(mat));
memset(ma,0,sizeof(ma));
for(int i=0;i<n;i++){
cin>>p[i].p>>r>>c;
p[i].x=c;
p[i].y=r;
ma[r][c]=1;
}
for(int i=0;i<n;i++){
judge(p[i]);
}
for(int i=0;i<4;i++){
r=y+goy[i];
c=x+gox[i];
if(r>=1&&c>=4&&r<=3&&c<=6){
if(!mat[r][c]) flag=true;
}
}
if(flag){
printf("NO\n");
}
else printf("YES\n");
}
return 0;
}