1589 - Xiangqi修改了好多次老是错

sinat_30777225 2015-10-11 11:46:33
#include<stdio.h>
struct qizi
{
char s[5];
int r1,c1;
}num[10];
int s(int n,int i,int r,int c)
{
int j;
for( j=0;j<n;j++)
if(num[j].r1==r)
{
int t1=num[j].c1-num[i].c1;
int t2=num[j].c1-c;
if(t1*t2<0)
return 0;
}
return 1;

}
int s2(int n,int i,int r,int c)
{
int j;
for( j=0;j<n;j++)
if(num[j].c1==c)
{
int t1=num[j].r1-num[i].r1;
int t2=num[j].r1-r;
if(t1*t2<0)
return 0;
}
return 1;
}
int s1(int n,int r,int c)
{
int j;
for(j=0;j<n;j++)
if(num[j].r1==r&&num[j].c1==c)
return 0;
return 1;
}
int checkmate(int n,int r,int c)
{
int j;
for(int i=0;i<n;i++)
{
if(num[i].r1==r&&num[i].c1==c)
continue;
if(num[i].s[0]=='R')
{
if(num[i].r1==r)
{
if(s(n,i,r,c))
return 0;
}
else if(num[i].c1==c)
{
// printf("AA\n");
if(s2(n,i,r,c))
{
// printf("BBBBBB\n");
return 0;
}
}

}
else if(num[i].s[0]=='G')
{
if(num[i].c1==c)
if(s2(n,i,r,c))
return 0;
}
else if(num[i].s[0]=='C')
{
if(num[i].r1==r)
{
int h=0;
for( j=0;j<n;j++)
if(num[j].r1==r)
{
int t1=num[j].c1-num[i].c1;
int t2=num[j].c1-c;
if(t1*t2<0)
h++;
}
if(1==h)
return 0;
}
else if(num[i].c1==c)
{
int w=0;
for( j=0;j<n;j++)
if(num[j].c1==c)
{
int t1=num[j].r1-num[i].r1;
int t2=num[j].r1-r;
if(t1*t2<0)
return 0;
}
if(1==w)
return 0;

}
}
else if(num[i].s[0]=='H')
{
if((num[i].r1-2==r&&num[i].c1-1==c)||(num[i].r1-2==r&&num[i].c1+1==c))
if(s1(n,num[i].r1-1,num[i].c1))
return 0;
else if((num[i].r1-1==r&&num[i].c1-2==c)||(num[i].r1+1==r&&num[i].c1-2==c))
if(s1(n,num[i].r1,num[i].c1-1))
return 0;
else if((num[i].r1+2==r&&num[i].c1-1==c)||(num[i].r1+2==r&&num[i].c1+1==c))
if(s1(n,num[i].r1+1,num[i].c1))
return 0;
else if((num[i].r1-1==r&&num[i].c1+2==c)||(num[i].r1+1==r&&num[i].c1+2==c))
if(s1(n,num[i].r1,num[i].c1+1))
return 0;
// printf("DDD\n");
}

}
return 1;
}
int main()
{
int r,c,N;
while(scanf("%d%d%d",&N,&r,&c)==3&&N)
{
int i;

for(i=0;i<N;i++)
scanf("%s%d%d",num[i].s,&num[i].r1,&num[i].c1);
int t=0;
for(i=0;i<N;i++)
{
if(num[i].s[0]=='G'&&num[i].c1==c&&s2(N,i,r,c))
t=1;
}
if(t)
{
printf("NO\n");
continue;
}
if(r-1>0&&checkmate(N,r-1,c))
{
printf("NO\n");
continue;
}
if(c-1>3&&checkmate(N,r,c-1))
{
printf("NO\n");
continue;
}
if(r+1<4&&checkmate(N,r+1,c))
{
printf("NO\n");
continue;
}

if(c+1<7&&checkmate(N,r,c+1))
{
printf("NO\n");
continue;
}
printf("YES\n");
}
return 0;
}
...全文
121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
大大大白 2015-10-13
  • 打赏
  • 举报
回复
通过gdb或者vs进行单步调试,一步步看是哪儿出了问题

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧