UVa-220 Othello

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
bool judge(int x,int y,char b,char d);
void m(int x,int y,char b,char d);
char a[10][10]={};
void change(char &a,char &b);
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n;
    cin>>n;
    while(n--)
    {
        memset(a,0,sizeof(a));
        for(int i=1;i<=8;i++)
        {
            for(int j=1;j<=8;j++)
            {
                cin>>a[i][j];
            }
        }
        char b,d;
        cin>>b;
        b=='W'?d='B':d='W';
        char c;
        while(cin>>c)
        {
            bool f=0;
            if(c=='L')
            {
                int cnt=0;
                for(int i=1;i<=8;i++)
                {
                    for(int j=1;j<=8;j++)
                    {
                        if(a[i][j]=='-')
                        {
                            if(judge(i,j,b,d))
                            {
                                f=1;
                                if(cnt==0)
                                    printf("(%d,%d)",i,j);
                                else
                                    printf(" (%d,%d)",i,j);
                                cnt++;
                            }
                        }
                    }
                }
                if(f==0)
                {
                    printf("No legal move.");
                }
            }
            else if(c=='M')
            {
                int num,i,j,sumb=0,sumw=0;
                cin>>num;
                i=num/10,j=num%10;
                if(judge(i,j,b,d))
                {
                    a[i][j]=b;
                    m(i,j,b,d);
                }
                else
                {
                    change(b,d);
                    a[i][j]=b;
                    m(i,j,b,d);
                }
                change(b,d);
                for(int ii=1;ii<=8;ii++)
                {
                    for(int jj=1;jj<=8;jj++)
                    {
                        if(a[ii][jj]=='B')
                        {
                            sumb++;
                        }
                        else if(a[ii][jj]=='W')
                        {
                            sumw++;
                        }
                    }
                }
                printf("Black - %2d White - %2d",sumb,sumw);
            }
            else if(c=='Q')
            {
                for(int i=1;i<=8;i++)
                {
                    for(int j=1;j<=8;j++)
                    {
                        printf("%c",a[i][j]);
                    }
                    printf("\n");
                }
                break;
            }
            printf("\n");
        }
        if(n>0)
            printf("\n");
    }
}
bool judge(int x,int y,char b,char d)
{
    if(a[x][y]!='-')
        return 0;
    bool f1=0,f2=0;
    for(int j=y+1;a[x][j]!='\0';j++)
    {
        if(a[x][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[x][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int j=y-1;a[x][j]!='\0';j--)
    {
        if(a[x][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[x][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x-1;a[i][y]!='\0';i--)
    {
        if(a[i][y]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][y]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x+1;a[i][y]!='\0';i++)
    {
        if(a[i][y]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][y]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x+1,j=y+1;a[i][j]!='\0';i++,j++)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x-1,j=y-1;a[i][j]!='\0';i--,j--)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x-1,j=y+1;a[i][j]!='\0';i--,j++)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    f1=f2=0;
    for(int i=x+1,j=y-1;a[i][j]!='\0';i++,j--)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        return 1;
    }
    return 0;
}
void m(int x,int y,char b,char d)
{
    int xx,yy;
    bool f1=0,f2=0;
    for(int j=y+1;a[x][j]!='\0';j++)
    {
        if(a[x][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[x][j]==b)
        {
            xx=x;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int j=y+1;j<yy;j++)
        {
            a[xx][j]=b;
        }
    }
    f1=f2=0;
    for(int j=y-1;a[x][j]!='\0';j--)
    {
        if(a[x][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[x][j]==b)
        {
            xx=x;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int j=y-1;j>yy;j--)
        {
            a[xx][j]=b;
        }
    }
    f1=f2=0;
    for(int i=x-1;a[i][y]!='\0';i--)
    {
        if(a[i][y]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][y]==b)
        {
            xx=i;
            yy=y;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x-1;i>xx;i--)
        {
            a[i][yy]=b;
        }
    }
    f1=f2=0;
    for(int i=x+1;a[i][y]!='\0';i++)
    {
        if(a[i][y]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][y]==b)
        {
            xx=i;
            yy=y;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x+1;i<xx;i++)
        {
            a[i][yy]=b;
        }
    }
    f1=f2=0;
    for(int i=x+1,j=y+1;a[i][j]!='\0';i++,j++)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            xx=i;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x+1,j=y+1;(i<xx)&&(j<yy);i++,j++)
        {
            a[i][j]=b;
        }
    }
    f1=f2=0;
    for(int i=x-1,j=y-1;a[i][j]!='\0';i--,j--)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            xx=i;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x-1,j=y-1;(i>xx)&&(j>yy);i--,j--)
        {
            a[i][j]=b;
        }
    }
    f1=f2=0;
    for(int i=x-1,j=y+1;a[i][j]!='\0';i--,j++)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            xx=i;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x-1,j=y+1;(i>xx)&&(j<yy);i--,j++)
        {
            a[i][j]=b;
        }
    }
    f1=f2=0;
    for(int i=x+1,j=y-1;a[i][j]!='\0';i++,j--)
    {
        if(a[i][j]==d)
        {
            f1=1;
            continue;
        }
        else if(a[i][j]==b)
        {
            xx=i;
            yy=j;
            f2=1;
            break;
        }
        else
        {
            f1=f2=0;
            break;
        }
    }
    if(f1&&f2)
    {
        for(int i=x+1,j=y-1;(i<xx)&&(j>yy);i++,j--)
        {
            a[i][j]=b;
        }
    }
}
void change(char &a,char &b)
{
    char t;
    t=a;
    a=b;
    b=t;
}

posted on 2015-03-05 01:47  windrises  阅读(190)  评论(0编辑  收藏  举报

导航