习题 4-1 象棋

#include <iostream>
#include <vector>
#include <string>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#define maxn 100010
using namespace std;
int Gx,Gy,Rx,Ry,Hx,Hy,Cx,Cy;
void printChessboard(int chessboard[][11],int m=11,int n=11)
{
    for(int i=1;i<m;i++)
        for(int j=1;j<n;j++)
        {
             cout<<chessboard[i][j];
             if(j==10)
                 cout<<endl;
        }

}
//放置棋子程序 N为红色棋子个数
void setPiece(int chessboard[][11],int N)
{
    while(N--)
    {
        int x,y;
        char species;
        cin>>species>>x>>y;
        switch (species) {
            case 'G':
            {
                chessboard[x][y]=1;
                Gx=x;Gy=y;
                break;
            }
            case 'R':
            {
                chessboard[x][y]=2;
                Rx=x;Ry=y;
                break;
            }
            case 'H':
            {
                chessboard[x][y]=3;
                Hx=x;Hy=y;
                break;

            }
            case 'C':
            {
                chessboard[x][y]=4;
                Cx=x;Cy=y;
                break;
            }

            default:
                break;
            }
   }
}
//处理红色主将封死的格,x行,y列,x 1->10从上到下,y1->10左到右
void RedChief(int chessboard[][11],int x,int y)
{
    if(x==0||y==0)
        return;
    //红色主将所在位置到那一列的最上端或者到向上走遇到的第一个红色棋子
    for(int i=x-1;i>0;i--)
    {
        if(chessboard[i][y]!=0)
        {
            break;
        }
        else
            chessboard[i][y]=9;
    }
}
//处理红车封死的格子
void RedChariot(int chessboard[][11],int x,int y)
{
    if(x==0||y==0)
        return;
    for(int i=x-1;i>0;i--)
    {
        if(chessboard[i][y]!=0&&chessboard[i][y]!=9)
        {
            break;
        }
        else
            chessboard[i][y]=9;
    }
    for(int i=x+1;i<11;i++)
    {
        if(chessboard[i][y]!=0&&chessboard[i][y]!=9)
        {
            break;
        }
        else
            chessboard[i][y]=9;
    }
    for(int i=y+1;i<11;i++)
    {
        if(chessboard[x][i]!=0&&chessboard[x][i]!=9)
        {
            break;
        }
        else
            chessboard[x][i]=9;
    }
    for(int i=y-1;i>0;i--)
    {
        if(chessboard[x][i]!=0&&chessboard[x][i]!=9)
        {
            break;
        }
        else
            chessboard[x][i]=9;
    }
}
void RedHorse(int chessboard[][11],int x,int y)
{
    if(x==0||y==0) return;
    if(chessboard[x-1][y]!=0&&chessboard[x-1][y]!=9);
    else
    {
        if((x-2)>0&&(y+1)<11)
        {
            chessboard[x-2][y+1]=9;
        }
        if((x-2)>0&&(y-1)>0)
        {
            chessboard[x-2][y-1]=9;
        }
    }
    if(chessboard[x+1][y]!=0&&chessboard[x+1][y]!=9);
    else
    {
        if((x+2)<11&&(y+1)<11)
        {
            chessboard[x+2][y+1]=9;
        }
        if((x+2)<11&&(y-1)>0)
        {
            chessboard[x+2][y-1]=9;
        }
    }
    if(chessboard[x][y+1]!=0&&chessboard[x][y+1]!=9);
    else
    {
        if((x+1)<11&&(y+2)<11)
        {
            chessboard[x+1][y+2]=9;
        }
        if((x-1)>0&&(y+2)<11)
        {
            chessboard[x-1][y+2]=9;
        }
    }
    if(chessboard[x][y-1]!=0&&chessboard[x][y-1]!=9);
    else
    {
        if((x+1)<11&&(y-2)>0)
        {
            chessboard[x+1][y-2]=9;
        }
        if((x-1)>0&&(y-2)>0)
        {
            chessboard[x-1][y-2]=9;
        }
    }
}
void RedCannon(int chessboard[][11],int x,int y)
{
    if(x==0||y==0)
        return;
    for(int i=x+1;i<11;i++)
    {
        if(chessboard[i][y]!=0&&chessboard[i][y]!=9)
        {
            for(int j=i+1;j<11;j++)
            {
                if(chessboard[j][y]!=0&&chessboard[j][y]!=9) return ;
                else    chessboard[j][y]=9;
            }
            break;
        }
    }
    for(int i=x-1;i>0;i--)
    {
        if(chessboard[i][y]!=0&&chessboard[i][y]!=9)
        {
            for(int j=i-1;j>0;j--)
            {
                if(chessboard[j][y]!=0&&chessboard[j][y]!=9) return ;
                else    chessboard[j][y]=9;
            }
            break;
        }
    }
    for(int i=y+1;i<11;i++)
    {
        if(chessboard[x][i]!=0&&chessboard[x][i]!=9)
        {
            for(int j=i+1;j<11;j++)
            {
                if(chessboard[x][j]!=0&&chessboard[x][j]!=9) return ;
                else
                {
                    chessboard[x][j]=9;
                }
                break;
            }
        }
    }
    for(int i=y-1;i>0;i--)
    {
        if(chessboard[x][i]!=0&&chessboard[x][i]!=9)
        {
            for(int j=i-1;j>0;j--)
            {
                if(chessboard[x][j]!=0&&chessboard[x][j]!=9)return ;
                else
                {
                    chessboard[x][j]=9;
                }
                break;
            }
        }
    }
}
void check(int checkboard[][11],int x,int y)
{
    if(x==1&&y==4)
    {
        if(checkboard[1][5]==9&&checkboard[2][4]==9&&checkboard[2][5]==9)
            cout<<"YES"<<endl;
        else
            cout<<"NO";
    }
    if(x==1&&y==5)
    {
        if(checkboard[1][4]==9&&checkboard[1][6]==9&&checkboard[2][5]==9)
            cout<<"YES"<<endl;
        else
            cout<<"NO";
    }
    if(x==1&&y==6)
    {
        if(checkboard[1][5]==9&&checkboard[2][5]==9&&checkboard[2][6]==9)
        {
            cout<<"YES"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    if(x==2&&y==4)
    {
        if(checkboard[1][4]==0&&checkboard[2][5]==0&&checkboard[3][4]==0)
        {
            cout<<"YES"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    if(x==2&&y==5)
    {
        if(checkboard[1][5]==0&&checkboard[3][5]==0&&checkboard[2][4]==0&&checkboard[2][6]==0
                &&checkboard[1][4]==0&&checkboard[1][6]==0&&checkboard[3][4]==0&&checkboard[3][6]==0)
        {
            cout<<"YES"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    if(x==2&&y==6)
    {
        if(checkboard[1][6]==0&&checkboard[3][6]==0&&checkboard[2][5]==0)
        {
            cout<<"YES"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    if(x==3&&y==4)
    {
        if(checkboard[2][4]==0&&checkboard[3][5]==0&&checkboard[2][5]==0)
        {
            cout<<"YES"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    if(x==3&&y==5)
    {
        if(checkboard[3][4]==0&&checkboard[2][5]==0&&checkboard[3][6]==0)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
}
int main()
{
    //象棋棋盘 10*10的数组,为了方便弃用0,11*11
    int chessboard[11][11];
    for(int i=0;i<11;i++)
        for(int j=0;j<11;j++)
            chessboard[i][j]=0;
    //printChessboard(chessboard,11,11);
    int N;
    while(cin>>N&&N!=0)
    {
        //红色将领1 黑色将领5(本来写的-1发现显示出来比别的数字多一位……) 红车2 红马3 红炮4
        int XOfBlackChief,YOfBlackChief;
        cin>>XOfBlackChief>>YOfBlackChief;
        chessboard[XOfBlackChief][YOfBlackChief]=5;
        setPiece(chessboard,N);
        //printChessboard(chessboard,11,11);
        RedChief(chessboard,Gx,Gy);
        //printChessboard(chessboard,11,11);
        RedChariot(chessboard,Rx,Ry);
        //printChessboard(chessboard,11,11);
        RedHorse(chessboard,Hx,Hy);
        printChessboard(chessboard,11,11);
        cout<<endl;
        RedCannon(chessboard,Cx,Cy);
        //cout<<endl<<Cx<<Cy<<endl;
        //printChessboard(chessboard,11,11);
        cout<<Gx<<Gy;
        check(chessboard,XOfBlackChief,YOfBlackChief);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值