zoukankan      html  css  js  c++  java
  • 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("
    ");
                    }
                    break;
                }
                printf("
    ");
            }
            if(n>0)
                printf("
    ");
        }
    }
    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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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]!='';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;
    }
  • 相关阅读:
    国内顺利使用Google的另类技巧
    Java进程间通信
    Java 多线程(七) 线程间的通信——wait及notify方法
    转:关于copy_to_user()和copy_from_user()的一些用法
    转: pthread_detach()函数
    转:pthread_create()
    转: ubuntu配置NFS,挂载开发板
    转:全志A20 GPIO 总结文档
    转:Linux 内核中的 cdev_alloc和cdev_add
    转:1.1 cdev_init cdev_alloc 使用说明
  • 原文地址:https://www.cnblogs.com/windrises/p/4653046.html
Copyright © 2011-2022 走看看