rt,谢谢。
//将军代码写好未在pd判定将军输出与游戏是否结束
#include<bits/stdc++.h>
using namespace std;
int a[110][100],n,t;
int dx[70][100],dy[70][100],madx[100],mady[100],duckx[100][30],ducky[100][30],c;
string s[70];
bool color=0,flag,flagend;
bool check() {
for(int i=0; i<=9; i++) {
for(int j=0; j<=8; j++) {
if(a[i][j]!=0) {
c=(a[i][j]-1)/7;
if(c==1){
c=0;
}
else{
c=1;
}
if((a[i][j]-1)%7==0||(a[i][j]-1)%7==1) {
t=(a[i][j]-1)%7;
for(int k=1; k<=4; k++) {
if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
// cout<<"======"<<endl;
// cout<<"[[[[[[[[["<<i+dx[t][k]<<"--------"<<j+dy[t][k]<<endl;
// cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
// cout<<a[8][4]<<endl;
return 1;
}
}
} else if((a[i][j]-1)%7==2) {
t=(a[i][j]-1)%7;
for(int k=1; k<=4; k++) {
if(a[i+(dx[t][k]/2)][j+(dy[t][k]/2)]==0) {
if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
return 1;
}
}
}
} else if((a[i][j]-1)%7==3) {
t=(a[i][j]-1)%7;
for(int k=1; k<=n; k++) {
if(a[i+madx[k]][j+mady[k]]==0) {
if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
// cout<<endl;
// cout<<"---++++-"<<a[i][j]<<"+++++---i:"<<i<<"+++++j:"<<j<<endl;
return 1;
}
}
}
} else if((a[i][j]-1)%7==4) {
t=(a[i][j]-1)%7;
for(int k=0; k<i; k++) {
if(a[k][j]!=0) {
if(a[k][j]%7==1+c*7) {
return 1;
}
break;
}
}
for(int k=i+1; k<=9; k++) {
if(a[k][j]!=0) {
if(a[k][j]%7==1+c*7) {
return 1;
}
break;
}
}
for(int k=0; k<j; k++) {
if(a[i][k]!=0) {
if(a[i][k]%7==1+c*7) {
return 1;
}
break;
}
}
for(int k=j+1; k<=8; k++) {
if(a[i][k]!=0) {
if(a[i][k]%7==1+c*7) {
return 1;
}
break;
}
}
} else if((a[i][j]-1)%7==5) {
t=(a[i][j]-1)%7;
for(int k=1; k<=8; k++) {
if(a[i+duckx[k][1]][j+ducky[k][1]]==0||a[i+duckx[k][2]][j+ducky[k][2]]==0) {
if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
return 1;
}
}
}
} else {
t=(a[i][j]-1)%7;
for(int k=1; k<=8; k++) {
if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
return 1;
}
}
}
}
}
}
return 0;
}
bool pd(int x1,int y1,int x2,int y2) {
if(a[x1][y1]==0) {
// cout<<"---1---"<<endl;
return 0;
} else if((a[x1][y1]-1)/7!=color) {
// cout<<"---2---"<<endl;
// cout<<"+++++"<<a[x1][y1]<<"+++++"<<endl;
return 0;
} else if(flagend==1) {
// cout<<"---3---"<<endl;
return 0;
} else if(a[x2][y2]!=0&&(a[x2][y2]-1)/7==color) {
return 0;
} else {
if((a[x1][y1]-1)%7==0) {
flag=0;
for(int i=1; i<=4; i++) {
if(x2-x1==dx[0][i]&&y2-y1==dy[0][i]) {
flag=1;
}
}
if(flag==0) {
return 0;
} else {
if(color==0) {
printf("red captain;");
color=1;
} else {
printf("blue captain;");
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
} else if((a[x1][y1]-1)%7==2) {
if(abs(x1-x2)!=2||abs(y1-y2)!=2) {
return 0;
}
if(a[(x1+x2)/2][(y1+y2)/2]!=0) {
return 0;
}
flag=0;
for(int i=1; i<=4; i++) {
if(x2-x1==dx[2][i]&&y2-y1==dy[2][i]) {
flag=1;
}
}
if(flag==0) {
return 0;
} else {
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
} else if((a[x1][y1]-1)%7==1) {
flag=0;
for(int i=1; i<=4; i++) {
if(x2-x1==dx[1][i]&&y2-y1==dy[1][i]) {
flag=1;
}
}
if(flag==0) {
// cout<<"__________~~~~~~"<<endl;
return 0;
} else {
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
} else if((a[x1][y1]-1)%7==3) {
flag=0;
for(int i=1; i<=8; i++) {
if(a[x1+madx[i]][y1+mady[i]]==0) {
if(x2-x1==dx[3][i]&&y2-y1==dy[3][i]) {
flag=1;
}
}
}
if(flag==0) {
return 0;
} else {
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
} else if((a[x1][y1]-1)%7==4) {
flag=0;
if(x2==x1||y2==y1) {
t=(a[x1][y1]-1)%7;
for(int k=0; k<x1; k++) {
if(k==x2&&y1==y2) {
flag=1;
}
if(a[k][y1]!=0) {
break;
}
}
for(int k=x1+1; k<=9; k++) {
if(k==x2&&y1==y2) {
flag=1;
}
if(a[k][y1]!=0) {
break;
}
}
for(int k=0; k<y1; k++) {
if(x1==x2&&k==y2) {
flag=1;
}
if(a[x1][k]!=0) {
break;
}
}
for(int k=y1+1; k<=8; k++) {
if(x1==x2&&k==y2) {
flag=1;
}
if(a[x1][k]!=0) {
break;
}
}
if(flag==0) {
return 0;
}
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
} else {
return 0;
}
} else if((a[x1][y1]-1)%7==5) {
flag=0;
for(int i=1; i<=8; i++) {
if(a[x1+duckx[i][1]][y1+ducky[i][1]]==0&&a[x1+duckx[i][2]][y1+ducky[i][2]]==0) {
if(x2-x1==dx[5][i]&&y2-y1==dy[5][i]) {
// cout<<"======="<<i<<endl;
// cout<<x1+duckx[i][2]<<" "<<y1+ducky[i][2]<<endl;
// cout<<"-----"<<endl;
flag=1;
}
}
}
if(flag==0) {
return 0;
} else {
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
} else if((a[x1][y1]-1)%7==6) {
// cout<<"!!!!!!"<<a[x1][y1]<<"!!!!!!!!"<<endl;
flag=0;
for(int i=1; i<=8; i++) {
if(x2-x1==dx[6][i]&&y2-y1==dy[6][i]) {
flag=1;
}
}
if(flag==0) {
return 0;
} else {
if(color==0) {
printf("red ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=1;
} else {
printf("blue ");
cout << s[(a[x1][y1]-1)%7] <<";";
color=0;
}
if(a[x2][y2]==0) {
printf("NA;");
} else {
if(color==0) {
printf("red ");
cout << s[(a[x2][y2]-1)%7] <<";";
} else {
printf("blue ");
cout << s[(a[x2][y2]-1)%7] <<";";
}
if((a[x2][y2]-1)%7==0) {
flagend=1;
}
}
a[x2][y2]=a[x1][y1];
a[x1][y1]=0;
if(check()) {
printf("yes;");
} else {
printf("no;");
}
if(flagend) {
printf("yes");
} else {
printf("no");
}
}
}
printf("\n");
}
return 1;
}
int main() {
s[0]="captain";
s[1]="guard";
s[2]="elephant";
s[3]="horse";
s[4]="car";
s[5]="duck";
s[6]="soldier";
dx[0][1]=1;
dx[0][2]=0;
dx[0][3]=-1;
dx[0][4]=0;
dy[0][1]=0;
dy[0][2]=1;
dy[0][3]=0;
dy[0][4]=-1;
dx[1][1]=1;
dx[1][2]=-1;
dx[1][3]=1;
dx[1][4]=-1;
dy[1][1]=1;
dy[1][2]=-1;
dy[1][3]=-1;
dy[1][4]=1;
dx[2][1]=2;
dx[2][2]=-2;
dx[2][3]=-2;
dx[2][4]=2;
dy[2][1]=2;
dy[2][2]=-2;
dy[2][3]=2;
dy[2][4]=-2;
dx[3][1]=2;
dx[3][2]=2;
dx[3][3]=-2;
dx[3][4]=-2;
dx[3][5]=-1;
dx[3][6]=-1;
dx[3][7]=1;
dx[3][8]=1;
dy[3][1]=1;
dy[3][2]=-1;
dy[3][3]=-1;
dy[3][4]=1;
dy[3][5]=2;
dy[3][6]=-2;
dy[3][7]=-2;
dy[3][8]=2;
madx[1]=1;
madx[2]=-1;
madx[3]=-1;
madx[4]=1;
madx[5]=0;
madx[6]=0;
madx[7]=0;
madx[8]=0;
mady[1]=0;
mady[2]=0;
mady[3]=0;
mady[4]=0;
mady[5]=1;
mady[6]=-1;
mady[7]=-1;
mady[8]=1;
dx[5][1]=3;
dx[5][2]=3;
dx[5][3]=-3;
dx[5][4]=-3;
dx[5][5]=2;
dx[5][6]=2;
dx[5][7]=-2;
dx[5][8]=-2;
dy[5][1]=2;
dy[5][2]=-2;
dy[5][3]=-2;
dy[5][4]=2;
dy[5][5]=3;
dy[5][6]=-3;
dy[5][7]=-3;
dy[5][8]=3;
duckx[1][1]=2;
ducky[1][1]=1;
duckx[1][2]=1;
ducky[1][2]=0;//
duckx[2][1]=2;
ducky[2][1]=-1;
duckx[2][2]=1;
ducky[2][2]=0;//
duckx[3][1]=-2;
ducky[3][1]=-1;
duckx[3][2]=1;
ducky[3][2]=0;//
duckx[4][1]=1;
ducky[4][1]=0;
duckx[4][2]=-1;
ducky[4][2]=0;//
duckx[5][1]=0;
ducky[5][1]=1;
duckx[5][2]=1;
ducky[5][2]=2;//
duckx[6][1]=0;
ducky[6][1]=-1;
duckx[6][2]=1;
ducky[6][2]=-2;//
duckx[7][1]=0;
ducky[7][1]=-1;
duckx[7][2]=-1;
ducky[7][2]=-2;//
duckx[8][1]=0;
ducky[8][1]=1;
duckx[8][2]=-1;
ducky[8][2]=2;
dx[6][1]=1;
dx[6][2]=-1;
dx[6][3]=0;
dx[6][4]=0;
dx[6][5]=1;
dx[6][6]=1;
dx[6][7]=-1;
dx[6][8]=-1;
dy[6][1]=0;
dy[6][2]=0;
dy[6][3]=1;
dy[6][4]=-1;
dy[6][5]=1;
dy[6][6]=-1;
dy[6][7]=-1;
dy[6][8]=1;
a[0][0]=5;
a[0][1]=4;
a[0][2]=3;
a[0][3]=2;
a[0][4]=1;
a[0][5]=2;
a[0][6]=3;
a[0][7]=4;
a[0][8]=5;
a[2][0]=6;
a[2][8]=6;
a[3][0]=7;
a[3][2]=7;
a[3][4]=7;
a[3][6]=7;
a[3][8]=7;
a[6][0]=14;
a[6][2]=14;
a[6][4]=14;
a[6][6]=14;
a[6][8]=14;
a[7][0]=13;
a[7][8]=13;
a[9][0]=12;
a[9][1]=11;
a[9][2]=10;
a[9][3]=9;
a[9][4]=8;
a[9][5]=9;
a[9][6]=10;
a[9][7]=11;
a[9][8]=12;
// for(int i=0;i<10;i++){
// for(int j=0;j<9;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
color=0;//0红1蓝
cin>>n;
for(int i=1,x1,x2,y1,y2; i<=n; i++) {
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(pd(x1,y1,x2,y2)==0) {
printf("Invalid command\n");
// cout<<"+++++"<<a[x1][y1]<<"++++++"<<endl;
}
}
// k[5][5]=9;
// for(int i=1;i<=8;i++){
// k[5+dx[5][i]][5+dy[5][i]]=i;
// }
// for(int i=1;i<=10;i++){
// for(int j=1;j<=10;j++){
// cout<<k[i][j]<<" ";
// }
// cout<<'\n';
// }
return 0;
}
/*红: 王(captain) :0
士(guard):1
象(elephant):2
马(horse):3
车(car):4
鸭(duck):5
兵(soldier):6
蓝: 王(captain) :7
士(guard):8
象(elephant):9
马(horse):10
车(car):11
鸭(duck):12
兵(soldier):13
*/