qq_34914690 2016-07-04 09:49 采纳率: 20%
浏览 1521

uva1589(hdu4121)中国象棋,13年福州赛区的题,过了许多组样例,就是wa,请看一看

#include
#include
#include
using namespace std;
int i,j,x,y,m,n,p,q,z;
char a[12][12]={0},ch;
int fac(int e ,int f,int p,int q){ //四个参数为两方将的坐标
int cou=0;
if(f==q){ //判断是否被将干掉
for(i=e+1;i<p;i++)
if(a[i][f]!=0)
break;
if(i==p)
return 1;
}
for(i=1;i<=10;i++) //判断是否被车干掉
for(j=1;j<=9;j++){
if(a[i][j]=='R'){

           if(i==e&&j!=f){
           for(m=min(j,f)+1;m<max(j,f);m++)
                if(a[i][m]!=0)
                break;
            if(m==max(j,f))
                return 1;
           }
           if(j==f&&i!=e){

             for(m=min(i,e)+1;m<max(i,e);m++)
                if(a[m][j]!=0)
                break;

            if(m==max(i,e))
                return 1;
           }
        }
        if(a[i][j]=='C'){   //判断是否被炮干掉
            if(i==e&&j!=f){
                for(m=min(j,f)+1;m<max(j,f);m++)
                 if(a[i][m]!=0)
                   cou++;    //判断炮架
                if(cou==1)
                    return 1;
            }
                 cou=0;
             if(j==f&&i!=e){
               for(m=min(i,e)+1;m<max(i,e);m++)
                if(a[m][j]!=0)
                      cou++;
                if(cou==1)
                    return 1;
                    cou=0;
             }

        }
        if(a[i][j]=='H'){    //判断是否被马干掉
            if(i==e-2&&j==f+1&&a[e-1][f+1]==0)
                return 1;
            if(i==e-1&&j==f+2&&a[e-1][f+1]==0)
                return 1;
            if(i==e+1&&j==f+2&&a[e+1][f+1]==0)
                return 1;
             if(i==e+2&&j==f+1&&a[e+1][f+1]==0)
                return 1;
            if(i==e-1&&j==f-2&&a[e-1][f-1]==0)
                return 1;
             if(i==e-2&&j==f-1&&a[e-1][f-1]==0)
                return 1;
                if(i==e+1&&j==f-2&&a[i+1][j-1]==0)
                    return 1;
                if(i==e+2&&j==f-1&&a[i+1][f-1]==0)
                    return 1;

        }

    }
    return 0;

}
int main(){
while(scanf("%d%d%d",&z,&x,&y)&&z,x,y){
for(i=1;i<=11;i++)
for(j=1;j<=11;j++)
a[i][j]=0;
getchar();
int b=0;
for(j=1;j<=z;j++){

    scanf("%c%d%d",&ch,&m,&n);
    getchar();
    a[m][n]=ch;
    if(ch=='G'){
        p=m;q=n;
    }

  }

  if(y-1>=4){
     b=fac(x,y-1,p,q);
     if(b==0){

printf("NO\n");
continue;
}
}
if(y+1<=6){
b=fac(x,y+1,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(x-1>=1){
b= fac(x-1,y,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(x+1<=3){
b= fac(x+1,y,p,q);
if(b==0){
printf("NO\n");
continue;
}
}
if(b!=0)
printf("YES\n");

}
}

  • 写回答

1条回答 默认 最新

  • y12345643 2016-07-17 07:29
    关注

    rintf("NO\n");
    continue;
    }
    }
    if(x+1<=3){
    b= fac(x+1,y,p,q);
    if(b==0){
    printf("NO\n");

    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助