题目描述
可知走法为中国象棋中的象的走法
解题思路
利用结构体来存储两个 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<bits/stdc++.h>
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;
}