biranda 2017-07-31 03:22 采纳率: 0%
浏览 1167

习题4-1 xiangqi UVA1589

这个象棋的题虽然思路有点耿直,写的挺快,不过死长。。而且三天了就是改不出来
看了看百度的AC代码,也用测试代码生成的数据测了,可就是WA.逼得只能推了重写
但还是跪求大佬们帮忙看看为啥不对。。。。心有不甘。。嘤嘤嘤??
给大佬们呈上C语言代码

#include <stdio.h>
#include <memory.h>
int max(int n,int m)
{
return m>n? m:n;
}
int min(int n,int m)
{
return m<n? m:n;
}
int heifang[10][9]= {0};
void jiang(int x,int y)
{
if(x==1)
    heifang[x][y-1]=1;
else if(x==3)
    heifang[x-2][y-1]=1;
else if(x==2)
{
    heifang[x-2][y-1]=1;
    heifang[x][y-1]=1;
}
if(y==4)
    heifang[x-1][y]=1;
else if(y==6)
    heifang[x-1][y-2]=1;
else if(y==5)
{
    heifang[x-1][y]=1;
    heifang[x-1][y-2]=1;
}
}
int hongfang[10][9]= {0};
int zhongjian[10][9]= {0};
void che(int x,int y)
{
int i;
for(i=x; i<10; i++)
{
    hongfang[i][y-1]+=1;
    if(zhongjian[i][y-1]==-1)
        break;
}
for(i=x-2; i>=0; i--)
{
    hongfang[i][y-1]+=1;
    if(zhongjian[i][y-1]==-1)
        break;
}
for(i=y; i<9; i++)
{
    hongfang[x-1][i]+=1;
    if(zhongjian[x-1][i]==-1)
        break;
}
for(i=y-2; i>=0; i--)
{
    hongfang[x-1][i]+=1;
    if(zhongjian[x-1][i]==-1)
        break;
}
}
void ma(int x_ma,int y_ma)
{
if(zhongjian[x_ma][y_ma-1]!=-1)
{
    if(x_ma+1<10&&y_ma<9&&x_ma+1>=0&&y_ma>=0)
        hongfang[x_ma+1][y_ma]+=1;
    if(x_ma+1<10&&y_ma-2<9&&x_ma+1>=0&&y_ma-2>=0)
        hongfang[x_ma+1][y_ma-2]+=1;
}
if(zhongjian[x_ma-2][y_ma-1]!=-1)
{
    if(x_ma-3<10&&y_ma<9&&x_ma-3>=0&&y_ma>=0)
        hongfang[x_ma-3][y_ma]+=1;
    if(x_ma-3<10&&y_ma-2<9&&x_ma-3>=0&&y_ma-2>=0)
        hongfang[x_ma-3][y_ma-2]+=1;
}
if(zhongjian[x_ma-1][y_ma]!=-1)
{
    if(x_ma<10&&y_ma+1<9&&x_ma>=0&&y_ma+1>=0)
        hongfang[x_ma][y_ma+1]+=1;
    if(x_ma-2<10&&y_ma+1<9&&x_ma-2>=0&&y_ma+1>=0)
        hongfang[x_ma-2][y_ma+1]+=1;
}
if(zhongjian[x_ma-1][y_ma-2]!=-1)
{
    if(x_ma-2<10&&y_ma-3<9&&x_ma-2>=0&&y_ma-3>=0)
        hongfang[x_ma-2][y_ma-3]+=1;
    if(x_ma<10&&y_ma-3<9&&x_ma>=0&&y_ma-3>=0)
        hongfang[x_ma][y_ma-3]+=1;
}
}
void pao(int x,int y,int x_pao,int y_pao)
{
int i,j;
int sum=0;
if(x==x_pao)
{
    for(j=min(y-1,y_pao-1); j<max(y-1,y_pao-1); j++)
    {
        if(zhongjian[x-1][j]!=-1)
            sum++;
    }
    if(y<y_pao&&sum==y_pao-y-1)
        for(i=y-2; i>=0; i--)
        {
            hongfang[x-1][i]+=1;
            if(zhongjian[x-1][i]==-1)
                break;
        }
    else if(y>y_pao&&sum==y-y_pao-1)
        for(i=y; i<9; i++)
        {
            hongfang[x-1][i]+=1;
            if(zhongjian[x-1][i]==-1)
                break;
        }
}
if(y==y_pao)
{
    for(j=min(x-1,x_pao-1); j<max(x-1,x_pao-1); j++)
    {
        if(zhongjian[j][y-1]!=-1)
            sum++;
    }
    if(x<x_pao&&sum==x_pao-x-1)
        for(i=x-2; i>=0; i--)
        {
            hongfang[i][y-1]+=1;
            if(zhongjian[i][y-1]==-1)
                break;
        }
    else if(x>x_pao&&sum==x-x_pao-1)
        for(i=x; i<10; i++)
        {
            hongfang[i][y-1]+=1;
            if(zhongjian[i][y-1]==-1)
                break;
        }
}
}
int judge()
{
int i,j,p,q;
int Tflag=0;
for(i=0; i for(j=3; j {
if(heifang[i][j]==1&&heifang[i][j]+hongfang[i][j]>=2)
Tflag++;
}
return Tflag;
}
int main()
{
int a;
char c;
while(1)
{
int num=0,flag=0;
int xjiang,yjiang,xshuai=11,yshuai=10;
int xpao[2],ypao[2],xche[2],yche[2],xma[2],yma[2];
int i,j,k;
scanf("%d %d %d",&a,&xjiang,&yjiang);
if(a==0)
break;
else
{
int p=0,m=0,n=0;
jiang(xjiang,yjiang);
for(i=0; i<10; i++)
for(j=0; j<9; j++)
if(heifang[i][j]==1)
num++;
for(i=0; i<a; i++)
{
getchar();
scanf("%c",&c);
if(c=='G')
{
scanf("%d %d",&xshuai,&yshuai);
zhongjian[xshuai-1][yshuai-1]=-1;
}
if(c=='R')
{
scanf("%d %d",&xche[n],&yche[n]);
zhongjian[xche[n]-1][yche[n]-1]=-1;
n++;
}
if(c=='C')
{
scanf("%d %d",&xpao[p],&ypao[p]);
zhongjian[xpao[p]-1][ypao[p]-1]=-1;
p++;
}
if(c=='H')
{
scanf("%d %d",&xma[m],&yma[m]);
zhongjian[xma[m]-1][yma[m]-1]=-1;
m++;
}
}
int nun=0;
if(xshuai!=11&&yshuai!=10)
{
for(i=xjiang; i<xshuai-1; i++)
if(zhongjian[i][yshuai-1]==-1)
nun++;
if(yshuai==yjiang)
{
if(nun==0) flag=1;
else if(nun==1&&zhongjian[xjiang][yshuai-1]==-1&&xjiang<3)
hongfang[xjiang][yshuai-1]+=1;
}
else if(yshuai!=yjiang&&nun==0)
hongfang[xjiang-1][yshuai-1]+=1;
}
for(i=0; i<n; i++)
che(xche[i],yche[i]);
for(i=0; i<m; i++)
ma(xma[i],yma[i]);
for(i=0; i<p; i++)
{
if(xshuai!=11&&yshuai!=10)
pao(xshuai,yshuai,xpao[i],ypao[i]);
for(j=0; j<m; j++)
pao(xma[j],yma[j],xpao[i],ypao[i]);
for(j=0; j<n; j++)
pao(xche[j],yche[j],xpao[i],ypao[i]);
}
if(p==2)
{
pao(xpao[0],ypao[0],xpao[1],ypao[1]);
pao(xpao[1],ypao[1],xpao[0],ypao[0]);
}
if(judge()==num&&num!=0&&!flag)
printf("YES\n");
else
printf("NO\n");
memset(heifang,0,sizeof(heifang));
memset(hongfang,0,sizeof(hongfang));
memset(zhongjian,0,sizeof(zhongjian));
}
}
return 0;
}
  • 写回答

3条回答 默认 最新

  • cao_yanjie 2017-07-31 05:24
    关注

    思路挺好的,不过我也看不太出来问题所在

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办