鸭棋只A了第一个点,自己看不出问题,求指导
查看原帖
鸭棋只A了第一个点,自己看不出问题,求指导
376235
了始开移蓝楼主2020/10/9 12:01
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int q;
int turn;
int chessboard[10][9];
int isput[10][9];
void return_(){
	chessboard[0][0]=03;
	chessboard[0][1]=04;
	chessboard[0][2]=05;
	chessboard[0][3]=06;
	chessboard[0][4]=07;
	chessboard[0][5]=06;
	chessboard[0][6]=05;
	chessboard[0][7]=04;
	chessboard[0][8]=03;
	chessboard[1][0]=-1;
	chessboard[1][1]=-1;
	chessboard[1][2]=-1;
	chessboard[1][3]=-1;
	chessboard[1][4]=-1;
	chessboard[1][5]=-1;
	chessboard[1][6]=-1;
	chessboard[1][7]=-1;
	chessboard[1][8]=-1;
	chessboard[2][0]=02;
	chessboard[2][1]=-1;
	chessboard[2][2]=-1;
	chessboard[2][3]=-1;
	chessboard[2][4]=-1;
	chessboard[2][5]=-1;
	chessboard[2][6]=-1;
	chessboard[2][7]=-1;
	chessboard[2][8]=02;
	chessboard[3][0]=01;
	chessboard[3][1]=-1;
	chessboard[3][2]=01;
	chessboard[3][3]=-1;
	chessboard[3][4]=01;
	chessboard[3][5]=-1;
	chessboard[3][6]=01;
	chessboard[3][7]=-1;
	chessboard[3][8]=01;
	chessboard[4][0]=-1;
	chessboard[4][1]=-1;
	chessboard[4][2]=-1;
	chessboard[4][3]=-1;
	chessboard[4][4]=-1;
	chessboard[4][5]=-1;
	chessboard[4][6]=-1;
	chessboard[4][7]=-1;
	chessboard[4][8]=-1;
	chessboard[9][0]=13;
	chessboard[9][1]=14;
	chessboard[9][2]=15;
	chessboard[9][3]=16;
	chessboard[9][4]=17;
	chessboard[9][5]=16;
	chessboard[9][6]=15;
	chessboard[9][7]=14;
	chessboard[9][8]=13;
	chessboard[8][0]=-1;
	chessboard[8][1]=-1;
	chessboard[8][2]=-1;
	chessboard[8][3]=-1;
	chessboard[8][4]=-1;
	chessboard[8][5]=-1;
	chessboard[8][6]=-1;
	chessboard[8][7]=-1;
	chessboard[8][8]=-1;
	chessboard[7][0]=12;
	chessboard[7][1]=-1;
	chessboard[7][2]=-1;
	chessboard[7][3]=-1;
	chessboard[7][4]=-1;
	chessboard[7][5]=-1;
	chessboard[7][6]=-1;
	chessboard[7][7]=-1;
	chessboard[7][8]=12;
	chessboard[6][0]=11;
	chessboard[6][1]=-1;
	chessboard[6][2]=11;
	chessboard[6][3]=-1;
	chessboard[6][4]=11;
	chessboard[6][5]=-1;
	chessboard[6][6]=11;
	chessboard[6][7]=-1;
	chessboard[6][8]=11;
	chessboard[5][0]=-1;
	chessboard[5][1]=-1;
	chessboard[5][2]=-1;
	chessboard[5][3]=-1;
	chessboard[5][4]=-1;
	chessboard[5][5]=-1;
	chessboard[5][6]=-1;
	chessboard[5][7]=-1;
	chessboard[5][8]=-1;
	isput[0][0]=1;
	isput[0][1]=1;
	isput[0][2]=1;
	isput[0][3]=1;
	isput[0][4]=1;
	isput[0][5]=1;
	isput[0][6]=1;
	isput[0][7]=1;
	isput[0][8]=1;
	isput[1][0]=0;
	isput[1][1]=0;
	isput[1][2]=0;
	isput[1][3]=0;
	isput[1][4]=0;
	isput[1][5]=0;
	isput[1][6]=0;
	isput[1][7]=0;
	isput[1][8]=0;
	isput[2][0]=1;
	isput[2][1]=0;
	isput[2][2]=0;
	isput[2][3]=0;
	isput[2][4]=0;
	isput[2][5]=0;
	isput[2][6]=0;
	isput[2][7]=0;
	isput[2][8]=1;
	isput[3][0]=1;
	isput[3][1]=0;
	isput[3][2]=1;
	isput[3][3]=0;
	isput[3][4]=1;
	isput[3][5]=0;
	isput[3][6]=1;
	isput[3][7]=0;
	isput[3][8]=1;
	isput[4][0]=0;
	isput[4][1]=0;
	isput[4][2]=0;
	isput[4][3]=0;
	isput[4][4]=0;
	isput[4][5]=0;
	isput[4][6]=0;
	isput[4][7]=0;
	isput[4][8]=0;
	isput[9][0]=2;
	isput[9][1]=2;
	isput[9][2]=2;
	isput[9][3]=2;
	isput[9][4]=2;
	isput[9][5]=2;
	isput[9][6]=2;
	isput[9][7]=2;
	isput[9][8]=2;
	isput[8][0]=0;
	isput[8][1]=0;
	isput[8][2]=0;
	isput[8][3]=0;
	isput[8][4]=0;
	isput[8][5]=0;
	isput[8][6]=0;
	isput[8][7]=0;
	isput[8][8]=0;
	isput[7][0]=2;
	isput[7][1]=0;
	isput[7][2]=0;
	isput[7][3]=0;
	isput[7][4]=0;
	isput[7][5]=0;
	isput[7][6]=0;
	isput[7][7]=0;
	isput[7][8]=2;
	isput[6][0]=2;
	isput[6][1]=0;
	isput[6][2]=2;
	isput[6][3]=0;
	isput[6][4]=2;
	isput[6][5]=0;
	isput[6][6]=2;
	isput[6][7]=0;
	isput[6][8]=2;
	isput[5][0]=0;
	isput[5][1]=0;
	isput[5][2]=0;
	isput[5][3]=0;
	isput[5][4]=0;
	isput[5][5]=0;
	isput[5][6]=0;
	isput[5][7]=0;
	isput[5][8]=0;
}

int movex[2]={1,-1};
int movey[2]={1,-1};
//更新duckchess1.1:
//检测是否能到_____处(check1~check7) 
bool canto(int x1,int y1,int x2,int y2){
	switch(chessboard[x1][y1]%10)
	{
		case 1:
			if((x1+1==x2&&y1==y2)||(x1-1==x2&&y1==y2)||(x1==x2&&y1+1==y2)||(x1==x2&&y1-1==y2)||(x1+1==x2&&y1+1==y2)||(x1+1==x2&&y1-1==y2)||(x1-1==x2&&y1+1==y2)||(x1-1==x2&&y1-1==y2))
			{
				return true;
			}
			break;
		case 2:
			for(int i=0;i<2;i++){
				for(int j=0;j<2;j++){
					if(x1+movex[i]*3==x2&&y1+movey[j]*2==y2&&!isput[x1+movex[i]*2][y1+movey[j]*1]&&!isput[x1+movex[i]*1][y1+movey[i]*0]){
						return true;
					}
					if(x1+movex[i]*2==x2&&y1+movey[j]*3==y2&&!isput[x1+movex[i]*1][y1+movey[j]*2]&&!isput[x1+movex[i]*0][y1+movey[i]*1]){
						return true;
					}
				}
			}
			break;
		case 3:
			if(x1<x2)
			{
				int i;
				for(i=x1+1;i<x2&&isput[i][y1]==0;i++);
				if(i==x2&&y1==y2)
					return true;
			}
			else
			{
				int i;
				for(i=x1-1;i>x2&&isput[i][y1]==0;i--);
				if(i==x2&&y1==y2)
					return true;
			}
			if(y1<y2)
			{
				int i;
				for(i=y1+1;i<y2&&isput[x1][i]==0;i++);
				if(i==y2&&x1==x2)
					return true;
			}
			else{
				int i;
				for(i=y1-1;i>y2&&isput[x1][i]==0;i--);
				if(i==y2&&x1==x2)
					return true;
			}
			break;
		case 4:
			for(int i=0;i<2;i++){
				for(int j=0;j<2;j++){
					if(x1+movex[i]*2==x2&&y1+movey[j]*1==y2&&!isput[x1+movex[i]*1][y1+movey[j]*0]){
						return true;
					}
					if(x1+movex[i]*1==x2&&y1+movey[j]*2==y2&&!isput[x1+movex[i]*0][y1+movey[j]*1]){
						return true;
					}
				}
			}
			break;
		case 5:
			for(int i=0;i<2;i++){
				for(int j=0;j<2;j++){
					if(x1+movex[i]*2==x2&&y1+movey[j]*2==y2&&!isput[x1+movex[i]*1][y1+movey[j]*1]){
						return true;
					}
				}
			}
			break;
		case 6:
			for(int i=0;i<2;i++){
				for(int j=0;j<2;j++){
					if(x1+movex[i]==x2&&y1+movey[j]==y2){
						return true;
					}
				}
			}
			break;
		case 7:
			for(int i=0;i<2;i++){
				for(int j=0;j<2;j++){
					if(x1+movex[i]*1==x2&&y1+movey[j]*0==y2){
						return true;
					}
					if(x1+movex[i]*0==x2&&y1+movey[j]*1==y2){
						return true;
					}
				}
			}
			break;
	}
	return false;
}
bool jj()
{
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(chessboard[i][j]%10==7)
			{
				for(int v=0;v<10;v++)
				{
					for(int u=0;u<9;u++)
					{
						if(chessboard[v][u]!=-1&&isput[v][u]!=isput[i][j])
						{
							if(canto(v,u,i,j))
							{
								return true;
							}
						}
					}
				}
			}
		}
	}
	return false;
}
int main()
{
	return_();
	int q,now,x1,x2,y1,y2;
	bool st=0,gone=0,fl=0;
	cin>>q;
	while(q--){
		cin>>x1>>y1>>x2>>y2;
		now=gone+1;
		if(isput[x1][y1]!=now||st||isput[x2][y2]==now||!canto(x1,y1,x2,y2))
		{
			cout<<"Invalid command"<<endl;
			continue;
		}
		fl=(chessboard[x2][y2]%10==7);
		if(isput[x1][y1]==1)
		{
			cout<<"red ";
		}
		else
		{
			cout<<"blue ";
		}
		switch(chessboard[x1][y1]%10)
		{
			case 1:
				cout<<"soldier;";
				break;
			case 2:
				cout<<"duck;";
				break;
			case 3:
				cout<<"car;";
				break;
			case 4:
				cout<<"horse;";
				break;
			case 5:
				cout<<"elephant;";
				break;
			case 6:
				cout<<"guard;";
				break;
			case 7:
				cout<<"captain;";
				break;
		}
		if(isput[x2][y2])
		{
			if(isput[x2][y2]==1)
			{
				cout<<"red ";
			}
			else
			{
				cout<<"blue ";
			}
			switch(chessboard[x2][y2]%10)
			{
				case 1:
					cout<<"soldier;";
					break;
				case 2:
					cout<<"duck;";
					break;
				case 3:
					cout<<"car;";
					break;
				case 4:
					cout<<"horse;";
					break;
				case 5:
					cout<<"elephant;";
					break;
				case 6:
					cout<<"guard;";
					break;
				case 7:
					cout<<"captain;";
					break;
			}
		}
		else
		{
			cout<<"NA;";
		}
		chessboard[x2][y2]=chessboard[x1][y1];
		chessboard[x1][y1]=-1;
		isput[x2][y2]=isput[x1][y1];
		isput[x1][y1]=0;
		if(!fl)
		{
			if(jj())
			{
				cout<<"yes;";
			}
			else
			{
				cout<<"no;";
			}
		}
		else
		{
			cout<<"no;";
		}
		if(fl)
		{
			st=true;
			cout<<"yes"<<endl;
		}
		else{
			cout<<"no"<<endl;
		}
		gone=!gone;
	}
	return 0;
}

2020/10/9 12:01
加载中...