UVA-1589 Xiangqi

以前做的题,写的丑,肯定可以优化,但是做过的题不想再看了,直接粘代码。

#include<iostream>

#include<cstdio>

#include<string>

#include<cstring>

using namespace std;

int f[11][10]={},ri[41]={},rj[41]={};

int num,bi,bj;

char c[41]={};

int judge(int i,int j);

int main()

{

    //freopen("in.txt","r",stdin);

    //freopen("out.txt","w",stdout);

    while(cin>>num>>bi>>bj)

    {

        if(num==0&&bi==0&&bj==0)

            break;

        memset(f,0,sizeof(f));

        memset(ri,0,sizeof(ri));

        memset(rj,0,sizeof(rj));

        for(int i=1;i<=num;i++)

        {

            cin>>c[i]>>ri[i]>>rj[i];

            f[ri[i]][rj[i]]=i;

        }

        int flag=0;

        if(bi-1>=1&&!flag)

            flag=judge(bi-1,bj);

        if(bi+1<=3&&!flag)

            flag=judge(bi+1,bj);

        if(bj-1>=4&&!flag)

            flag=judge(bi,bj-1);

        if(bj+1<=6&&!flag)

            flag=judge(bi,bj+1);

        if(flag==1)

            cout<<"NO"<<endl;

        else

            cout<<"YES"<<endl;

        string s;

        getline(cin,s);

    }

}

int judge(int x,int y)

{

    if(f[x][y]!=0)

    {

        c[f[x][y]]=' ';

        f[x][y]=-1;

    }

    for(int i=1;i<=num;i++)

    {

        if(c[i]=='G')

        {

            if(rj[i]==y)

            {

                int sum=0;

                for(int ii=bi+1;ii<=ri[i]-1;ii++)

                {

                    if(f[ii][y]>0)

                        sum++;

                }

                if(sum==0)

                    return 0;

            }

        }

        if(c[i]=='R')

        {

            if(ri[i]==x)

            {

                int sum=0;

                if(rj[i]<y-1)

                {

                    for(int ii=rj[i]+1;ii<=y-1;ii++)

                    {

                        if(f[x][ii]>0)

                            sum++;

                    }

                }

                else if(rj[i]>y+1)

                {

                    for(int ii=y+1;ii<=rj[i]-1;ii++)

                    {

                        if(f[x][ii]>0)

                            sum++;

                    }

                }

                if(sum==0)

                    return 0;

            }

            else if(rj[i]==y)

            {

                int sum=0;

                if(ri[i]<x-1)

                {

                    for(int ii=ri[i]+1;ii<x-1;ii++)

                    {

                        if(f[ii][y]>0)

                            sum++;

                    }

                }

                else if(ri[i]>x+1)

                {

                    for(int ii=x+1;ii<=ri[i]-1;ii++)

                    {

                        if(f[ii][y]>0)

                            sum++;

                    }

                }

                if(sum==0)

                    return 0;

            }

        }

        if(c[i]=='H')

        {

            if(f[ri[i]-1][rj[i]]==0)

            {

                if((x==ri[i]-2)&&(y==rj[i]+1||y==rj[i]-1))

                    return 0;

            }

            if(f[ri[i]+1][rj[i]]==0)

            {

                if((x==ri[i]+2)&&(y==rj[i]+1||y==rj[i]-1))

                    return 0;

            }

            if(f[ri[i]][rj[i]-1]==0)

            {

                if((y==rj[i]-2)&&(x==ri[i]+1||x==ri[i]-1))

                    return 0;

            }

            if(f[ri[i]][rj[i]+1]==0)

            {

                if((y==rj[i]+2)&&(x==ri[i]+1||x==ri[i]-1))

                    return 0;

            }

        }

        if(c[i]=='C')

        {

            if(ri[i]==x)

            {

                int sum=0;

                if(rj[i]<y-1)

                {

                    for(int ii=rj[i]+1;ii<=y-1;ii++)

                    {

                        if(f[x][ii]>0)

                            sum++;

                    }

                }

                else if(rj[i]>y+1)

                {

                    for(int ii=y+1;ii<=rj[i]-1;ii++)

                    {

                        if(f[x][ii]>0)

                            sum++;

                    }

                }

                if(sum==1)

                    return 0;

            }

            else if(rj[i]==y)

            {

                int sum=0;

                if(ri[i]<x-1)

                {

                    for(int ii=ri[i]+1;ii<x-1;ii++)

                    {

                        if(f[ii][y]>0)

                            sum++;

                    }

                }

                else if(ri[i]>x+1)

                {

                    for(int ii=x+1;ii<=ri[i]-1;ii++)

                    {

                        if(f[ii][y]>0)

                            sum++;

                    }

                }

                if(sum==1)

                    return 0;

            }

        }

    }

    return 1;

}

你可能感兴趣的:(uva)