UVA 1589 求问这个题到底哪里有bug 我一直wa,所以才想求救大家的,希望大家帮帮我

小少年驭风 2017-07-24 05:27:04
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
char board[11][10];
struct chess
{
char name;
int a;
int b;
}c[8];//代表的是7个棋子
int Kill(int x,int y,int n)
{
for(int i=1;i<=n;i++)//逐个遍历是否有威胁,有威胁,winflag++
{
if(c[i].name=='G')//将军
{
if(c[i].b==y)//在同一列
{
int flag=0;
for(int j=x+1;j<=c[i].a-1;j++)
{
if(board[j][y]!='\0')
{
flag=1;
break;
}
}
if(flag==0)
return 1;
}
else
continue;
}
else if(c[i].name=='C')//火炮,搜索是否与(x-1,y)在同一条直线上,如果在的话,看其中是否只隔了一个棋子
{
if(y==c[i].b)
{
int flag=0;
int min1,max1;
min1=x<c[i].a?x:c[i].a;
max1=x>c[i].a?x:c[i].a;
for(int j=min1+1;j<=max1-1;j++)
{
if(board[j][y]!='\0')//统计中间棋子的数量
{
flag++;
}
}
if(flag==1)
return 1;

}
else if(x==c[i].a)
{
int flag=0;//比较炮和将的位置
int min1,max1;
min1=y<c[i].b?y:c[i].b;
max1=y>c[i].b?y:c[i].b;
for(int j=min1+1;j<=max1-1;j++)
{
if(board[x][j]!='\0')//统计中间棋子的数量
{
flag++;
}
}
if(flag==1)
return 1;
}
else
continue;

}
else if(c[i].name=='R')//只要其中没有任何的棋子
{
if(y==c[i].b)
{
int flag=0;
int min1,max1;
min1=x<c[i].a?x:c[i].a;
max1=x>c[i].a?x:c[i].a;
for(int j=min1+1;j<=max1-1;j++)
{
if(board[j][y]!='\0')//统计中间棋子的数量
{
flag=1;
break;
}
}
if(flag==0)
return 1;
}
else if(x==c[i].a)
{
int flag=0;
int min1,max1;
min1=y<c[i].b?y:c[i].b;
max1=y>c[i].b?y:c[i].b;
for(int j=min1+1;j<=max1-1;j++)
{
if(board[x][j]!='\0')//统计中间棋子的数量
{
flag=1;
break;
}
}
if(flag==0)
return 1;
}
else
continue;

}
else if(c[i].name=='H')//马
{
if(abs(c[i].b-y)==1&&c[i].a-x==-2&&board[c[i].a+1][c[i].b]=='\0')
return 1;
else if(abs(c[i].b-y)==1&&c[i].a-x==2&&board[c[i].a-1][c[i].b]=='\0')
return 1;
else if(abs(c[i].a-x)==1&&c[i].b-y==2&&board[c[i].a][c[i].b-1]=='\0')
return 1;
else if(abs(c[i].a-x)==1&&c[i].b-y==-2&&board[c[i].a][c[i].b+1]=='\0')
return 1;
else
continue;
}
}
return 0;
}
int main()
{
struct chess exc;
int n,x,y;
char cx;
while(scanf("%d%d%d",&n,&x,&y)==3&&n&&x&&y)
{
scanf("%c",&cx);
memset(board,'\0',sizeof(board));
c[0].name='Q';
c[0].a=x;
c[0].b=y;
board[x][y]='Q';//代表的黑方的将
for(int i=1;i<=n;i++)//输入,初始化棋盘
{
scanf("%c%d%d",&c[i].name,&c[i].a,&c[i].b);
scanf("%c",&cx);
board[c[i].a][c[i].b]=c[i].name;
}
int winflag=0;//四个 方向都不能走,则为4,此时输出yes
//如果两个人直接见面了,那么就直接输出no
for(int i=1;i<=n;i++)
{
if(c[i].name=='G')
{
if(y==c[i].b)
{
int flag=0;
for(int j=x+1;j<=c[i].a-1;j++)
{
if(board[j][y]!='\0')
{
flag=1;
break;
}
}
if(flag==0)
{
winflag=-1;
}
}
break;
}
}
if(x==1)
{
winflag++;
}
else if(x>1)//向上
{
int n1=n;
char origin='\0';
board[x][y]='\0';
if(board[x-1][y]!='\0')//是存在棋子的
{
for(int i=1;i<=n1;i++)//删除那个棋子的信息
{
if(c[i].a==x-1&&c[i].b==y)//仅仅是交换该i和最后一个,然后将n的值减小就ok,便于回复
{
origin=c[i].name;
exc=c[i];
c[i]=c[n];
c[n]=exc;
n1--;
break;
}
}
}
board[x-1][y]='Q';//将移到了新的位置
c[0].a=x-1;
if(Kill(c[0].a,c[0].b,n1))
{
winflag++;
}
board[x][y]='Q';//如果没有删除,那么不就是多添加了?
board[x-1][y]=origin;
c[0].a=x;
}
if(x==3)
{
winflag++;
}
else if(x<3)
{
int n1=n;
char origin='\0';
board[x][y]='\0';
if(board[x+1][y]!='\0')//是存在棋子的
{
for(int i=1;i<=n1;i++)//删除那个棋子的信息
{
if(c[i].a==x+1&&c[i].b==y)
{
origin=c[i].name;
exc=c[i];
c[i]=c[n];
c[n]=exc;
n1--;
break;
}
}
}
board[x+1][y]='Q';//将移到了新的位置
c[0].a=x+1;
if(Kill(c[0].a,c[0].b,n1))
{
winflag++;
}
board[x][y]='Q';
board[x+1][y]=origin;
c[0].a=x;
}
if(y==4)
{
winflag++;
}
else if(y>4)
{
int n1=n;
char origin='\0';
board[x][y]='\0';
if(board[x][y-1]!='\0')
{
for(int i=1;i<=n1;i++)//删除那个棋子的信息
{
if(c[i].a==x&&c[i].b==y-1)
{
origin=c[i].name;
exc=c[i];
c[i]=c[n];
c[n]=exc;
n1--;
break;
}
}
}
board[x][y-1]='Q';//将移到了新的位置
c[0].b=y-1;
if(Kill(c[0].a,c[0].b,n1))
{
winflag++;
}
board[x][y]='Q';
board[x][y-1]=origin;
c[0].b=y;

}
if(y==6)
{
winflag++;
}
else if(y<6)
{
int n1=n;
char origin='\0';
board[x][y]='\0';
if(board[x][y+1]!='\0')
{
for(int i=1;i<=n1;i++)//删除那个棋子的信息
{
if(c[i].a==x&&c[i].b==y+1)
{
origin=c[i].name;
exc=c[i];
c[i]=c[n];
c[n]=exc;
n1--;
break;
}
}
}
board[x][y+1]='Q';//将移到了新的位置
c[0].b=y+1;
if(Kill(c[0].a,c[0].b,n1))
{
winflag++;
}
board[x][y]='Q';
board[x][y+1]=origin;
c[0].b=y;
}
if(winflag==4)
{
printf("YES\n");
}
else
printf("NO\n");
scanf("%c",&cx);
}
return 0;
}
...全文
374 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小少年驭风 2017-07-24
  • 打赏
  • 举报
回复
因为提交了17次还没过,我想问问大家到底我错在哪里

5,531

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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