uva 10196 Check The Check

题目:10196 - Check The Check

思路:水题。。模拟 


这个代码,前半部分是在数统机房上课的时候写的,挫了点,懒得改了。



#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
int dir[8][2]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1};
int move[8][2]={2,1,1,2,-1,2,-2,1,-1,-2,-2,-1,1,-2,2,-1};
char s[9][9];
int cas=0;
int main()
{
    while(1)
    {
        int ans=0;
        for(int i=0;i<8;i++)
        {
            gets(s[i]);
            for(int j=0;j<8;j++)
                if(s[i][j]=='.')
                    ans++;
        }
        if(ans==64)
            break;
        int ctag=0;
        for(int i=0;i<8;i++)
            for(int j=0;j<8;j++)
            {
                if(s[i][j]=='.')
                    ;
                else if(s[i][j]=='b')
                {
                    bool t_left=1,t_right=1;
                    // down
                    for(int k=1;;k++)
                    {
                        if(i+k<8)
                        {
                            if(t_left&&j-k>=0)
                            {
                                if(s[i+k][j-k]=='K')
                                {
                                    ctag=1;/// black win
                                    break;
                                }
                                else if(s[i+k][j-k]!='.')
                                {
                                    t_left=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(i+k<8)
                        {
                            if(t_right&&j+k<8)
                            {
                                if(s[i+k][j+k]=='K')
                                {
                                    ctag=1; /// black win
                                    break;
                                }
                                else if(s[i+k][j+k]!='.')
                                {
                                    t_right=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    // up
                    t_right=1,t_left=1;
                    for(int k=1;;k++)
                    {
                        if(i-k>=0)
                        {
                            if(t_left&&j-k>=0)
                            {
                                if(s[i-k][j-k]=='K')
                                {
                                    ctag=1;/// black win
                                    break;
                                }
                                else if(s[i-k][j-k]!='.')
                                {
                                    t_left=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(i-k>=0)
                        {
                            if(t_right&&j+k<8)
                            {
                                if(s[i-k][j+k]=='K')
                                {
                                    ctag=1; /// black win
                                    break;
                                }
                                else if(s[i-k][j+k]!='.')
                                {
                                    t_right=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                }
                else if(s[i][j]=='B')
                {
                    bool t_left=1,t_right=1;
                    // down
                    for(int k=1;;k++)
                    {
                        if(i+k<8)
                        {
                            if(t_left&&j-k>=0)
                            {
                                if(s[i+k][j-k]=='k')
                                {
                                    ctag=-1;/// white win
                                    break;
                                }
                                else if(s[i+k][j-k]!='.')
                                {
                                    t_left=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(i+k<8)
                        {
                            if(t_right&&j+k<8)
                            {
                                if(s[i+k][j+k]=='k')
                                {
                                    ctag=-1; /// white win
                                    break;
                                }
                                else if(s[i+k][j+k]!='.')
                                {
                                    t_right=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    // up
                    t_right=1,t_left=1;
                    for(int k=1;;k++)
                    {
                        if(i-k>=0)
                        {
                            if(t_left&&j-k>=0)
                            {
                                if(s[i-k][j-k]=='k')
                                {
                                    ctag=-1;/// white win
                                    break;
                                }
                                else if(s[i-k][j-k]!='.')
                                {
                                    t_left=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(i-k>=0)
                        {
                            if(t_right&&j+k<8)
                            {
                                if(s[i-k][j+k]=='k')
                                {
                                    ctag=-1; /// white win
                                    break;
                                }
                                else if(s[i-k][j+k]!='.')
                                {
                                    t_right=0;
                                }
                            }
                        }
                        else
                            break;
                    }
                }
                else if(s[i][j]=='R')
                {
                    bool right=1,up=1,down=1,left=1;
                    for(int k=1;;k++)
                    {
                        if(right&&j+k<8)
                        {
                            if(s[i][j+k]=='k')
                            {
                                ctag=-1;
                                break;
                            }
                            else if(s[i][j+k]!='.')
                            {
                                right=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(left&&j-k>=0)
                        {
                            if(s[i][j-k]=='k')
                            {
                                ctag=-1;
                                break;
                            }
                            else if(s[i][j-k]!='.')
                            {
                                left=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(up&&i-k>=0)
                        {
                            if(s[i-k][j]=='k')
                            {
                                ctag=-1;
                                break;
                            }
                            else if(s[i-k][j]!='.')
                            {
                                up=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(down&&i+k<8)
                        {
                            if(s[i+k][j]=='k')
                            {
                                ctag=-1;
                                break;
                            }
                            else if(s[i+k][j]!='.')
                            {
                                down=0;
                            }
                        }
                        else
                            break;
                    }
                }
                else if(s[i][j]=='r')
                {
                    bool right=1,up=1,down=1,left=1;
                    for(int k=1;;k++)
                    {
                        if(right&&j+k<8)
                        {
                            if(s[i][j+k]=='K')
                            {
                                ctag=1;
                                break;
                            }
                            else if(s[i][j+k]!='.')
                            {
                                right=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(left&&j-k>=0)
                        {
                            if(s[i][j-k]=='K')
                            {
                                ctag=1;
                                break;
                            }
                            else if(s[i][j-k]!='.')
                            {
                                left=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(up&&i-k>=0)
                        {
                            if(s[i-k][j]=='K')
                            {
                                ctag=1;
                                break;
                            }
                            else if(s[i-k][j]!='.')
                            {
                                up=0;
                            }
                        }
                        else
                            break;
                    }
                    for(int k=1;;k++)
                    {
                        if(down&&i+k<8)
                        {
                            if(s[i+k][j]=='K')
                            {
                                ctag=1;
                                break;
                            }
                            else if(s[i+k][j]!='.')
                            {
                                down=0;
                            }
                        }
                        else
                            break;
                    }
                }
                else if(s[i][j]=='p')
                {
                    if(i+1<8)
                    {
                        if(j+1<8)
                        {
                            if(s[i+1][j+1]=='K')
                            {
                                ctag=1;
                            }
                        }
                        if(j-1>=0)
                        {
                            if(s[i+1][j-1]=='K')
                            {
                                ctag=1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='P')
                {
                    if(i-1>=0)
                    {
                        if(j+1<8)
                        {
                            if(s[i-1][j+1]=='k')
                            {
                                ctag=-1;
                            }
                        }
                        if(j-1>=0)
                        {
                            if(s[i-1][j-1]=='k')
                            {
                                ctag=-1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='k')
                {
                    for(int c=0;c<8;c++)
                    {
                        int xx=i+dir[c][0];
                        int yy=j+dir[c][1];
                        if(xx>=0&&xx<8&&yy>=0&&yy<8)
                        {
                            if(s[xx][yy]=='K')
                            {
                                ctag=1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='K')
                {
                    for(int c=0;c<8;c++)
                    {
                        int xx=i+dir[c][0];
                        int yy=j+dir[c][0];
                        if(xx>=0&&xx<8&&yy>=0&&yy<8)
                        {
                            if(s[xx][yy]=='k')
                            {
                                ctag=-1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='N')
                {
                    for(int c=0;c<8;c++)
                    {
                        int xx=i+move[c][0];
                        int yy=j+move[c][1];
                        if(xx>=0&&xx<8&&yy>=0&&yy<8)
                        {
                            if(s[xx][yy]=='k')
                            {
                                ctag=-1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='n')
                {
                    for(int c=0;c<8;c++)
                    {
                        int xx=i+move[c][0];
                        int yy=j+move[c][1];
                        if(xx>=0&&xx<8&&yy>=0&&yy<8)
                        {
                            if(s[xx][yy]=='K')
                            {
                                ctag=1;
                            }
                        }
                    }
                }
                else if(s[i][j]=='q')
                {
                    for(int c=0;c<8;c++)
                    {
                        for(int k=1;;k++)
                        {
                            int xx=i+dir[c][0]*k;
                            int yy=j+dir[c][1]*k;
                            if(xx>=0&&xx<8&&yy>=0&&yy<8)
                            {
                                if(s[xx][yy]=='K')
                                {
                                    ctag=1;
                                    break;
                                }
                                else if(s[xx][yy]!='.')
                                    break;
                            }
                            else
                                break;
                        }
                    }
                }
                else if(s[i][j]=='Q')
                {
                    for(int c=0;c<8;c++)
                    {
                        for(int k=1;;k++)
                        {
                            int xx=i+dir[c][0]*k;
                            int yy=j+dir[c][1]*k;
                            if(xx>=0&&xx<8&&yy>=0&&yy<8)
                            {
                                if(s[xx][yy]=='k')
                                {
                                    ctag=-1;
                                    break;
                                }
                                else if(s[xx][yy]!='.')
                                    break;
                            }
                            else
                                break;
                        }
                    }
                }
                //printf("%c",s[i][j]);
            }

        printf("Game #%d: ",++cas);
        if(ctag==-1)
            printf("black king is in check.
");
        else if(ctag==1)
            printf("white king is in check.
");
        else
            printf("no king is in check.
");
        getchar();
    }
    return 0;
}


原文地址:https://www.cnblogs.com/snake-hand/p/3141138.html