题意:
两个K要开会,#格子可以走,不可以做开会地点。 两个K无时无刻都在移动,不可以停留
思路:
记录K的位置的奇偶性,存图比对
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m;
char mp[505][505];
int vis1[505][505];
int vis2[505][505];
int a[505][505];
int yes=0;/*
bool judge(int to,int tx,int ty,int x,int y)
{
if(x>n||x<1||y>n||y<1||a[x][y]==-1 )
{
return false;
}
if(to==0)
{
if( a[tx+1][ty+1]==-1 )
return false;
}
if(to==1)
{
if(a[tx+1][ty-1]==-1)
return false;
}
if(to==2)
{
if(a[tx-1][ty+1]==-1)
return false;
}
if(to==3)
{
if(a[tx-1][ty-1]==-1)
return false;
}
return true;
}*/
void dfs1(int x,int y,int kind)
{
int dir[4][2]={2,2,2,-2,-2,2,-2,-2};
if(x>n||x<1||y>n||y<1||vis1[x][y] )
{
return ;
}
if(kind==1)
vis1[x][y]=1,kind=2;
else if(kind==2)
{
vis1[x][y]=2;
kind=1;
}
if(a[x][y]==-1)
vis1[x][y]=3;
for(int i=0;i<4;i++)
{
//if(judge(i,x,y,x+dir[i][0],y+dir[i][1]))
dfs1(x+dir[i][0],y+dir[i][1],kind);
}
}
void dfs2(int x,int y,int kind)
{
int dir[4][2]={2,2,2,-2,-2,2,-2,-2};
if(x>n||x<1||y>n||y<1||vis2[x][y] )
{
return ;
}
if(kind==1)
vis2[x][y]=1,kind=2;
else if(kind==2)
{
vis2[x][y]=2;
kind=1;
}
if(a[x][y]==-1)
vis2[x][y]=3;
for(int i=0;i<4;i++)
{
//if(judge(i,x,y,x+dir[i][0],y+dir[i][1]))
dfs2(x+dir[i][0],y+dir[i][1],kind);
}
}
int main()
{
n=8;
int T;
cin>>T;
while(T--)
{
yes=0;
int fir=-1,sec=-1;
int fx,fy,sx,sy;
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%s",&mp[i]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i-1][j-1]=='K')
{
if(fir==-1)
{
fx=i,fy=j;
fir=1;
}
else
{
sx=i,sy=j;
}
}
if(mp[i-1][j-1]=='#')
{
a[i][j]=-1;
}
}
}
dfs1(fx,fy,1);
dfs2(sx,sy,1);
/*for(int i=1;!yes&&i<=n;i++)
{
for(int j=1;!yes&&j<=n;j++)
{
cout<<vis1[i][j]<<" ";
}
cout<<endl;
}
cout<<endl<<endl;
for(int i=1;!yes&&i<=n;i++)
{
for(int j=1;!yes&&j<=n;j++)
{
cout<<vis2[i][j]<<" ";
}
cout<<endl;
}*/
for(int i=1;!yes&&i<=n;i++)
{
for(int j=1;!yes&&j<=n;j++)
{
if(vis1[i][j]==vis2[i][j]&&vis1[i][j]!=0&&vis1[i][j]!=3)
{
yes=1;
break;
}
}
}
if(yes)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
/*
1
........
........
..#.....
..#..#..
..####..
...##...
........
....K#K#
*/