#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);
}
}
习题 4-1 象棋
最新推荐文章于 2022-03-17 20:55:48 发布