A. Two Semiknights Meet

A. Two Semiknights Meet_第1张图片

A. Two Semiknights Meet_第2张图片

题目描述

可知走法为中国象棋中的象的走法

解题思路

利用结构体来存储两个 K K K的位置 x , y x,y x,y,因为两个 K K K同时走,所以会出现两种情况

  • 相向而行,两者距离减少

  • 相反而行,两者距离不变

我们完全可以不考虑格子是好是坏,因为只要有起始位置,起始位置是好的,那么两者就可以在好格子上相遇,所以只需考虑两者的起始位置$ \left ( x1,y1 \right ) , , ,\left ( x2,y2 \right ) $,横纵坐标对应都同时可以被 4 4 4 整除即可。

如图

# # # # # #
# # # # # #
# # # # # #
# # # # # #
# # # # # #
# # # # # #
# # # # # #
K # # # K #

可以同时跳到上方,其中一个往回跳,另一个往那一个的起始位置跳

#include
using namespace std;
int n;
const int N=9;
char g[N][N];
struct node{
	int x,y;
}a[2];//存储坐标
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int k=0;
		for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)cin>>g[i][j];//输入地图
		for(int i=0;i<8;i++)
		{
			for(int j=0;j<8;j++)
			{
				if(g[i][j]=='K')
				{
					a[k].x=i,a[k].y=j;
					k++;//存储横纵坐标
				}
			}
		}
		if((abs(a[0].x-a[1].x)%4!=0)||abs((a[1].y-a[0].y)%4!=0))cout<<"NO"<<endl;
		else cout<<"YES"<<endl;//判断对错
		a[1].x=a[0].x=a[0].y=a[1].y=0;//结构体数组清零
	}
	return 0;
}

你可能感兴趣的:(算法)