thanx in advance....
Code: Select all
#include<iostream>
using namespace std;
char arr[8][8];
int chk[8][8];
int moves;
void floodfill(int i,int j,int m,int c)
{
if(c==0)
return;
if(arr[i][j]=='P')
c--;
arr[i][j]='.';
chk[i][j]=m;
if(i-2>=0 && j+1<=7 && (arr[i-2][j+1]=='P' || arr[i-2][j+1]=='.') && chk[i-2][j+1]>m && m<moves)
floodfill(i-2,j+1,m+1,c);
if(i-2>=0 && j-1>=0 && (arr[i-2][j-1]=='P' || arr[i-2][j-1]=='.') && chk[i-2][j-1]>m && m<moves)
floodfill(i-2,j-1,m+1,c);
if(i+2<=7 && j-1>=0 && (arr[i+2][j-1]=='P' || arr[i+2][j-1]=='.') && chk[i+2][j-1]>m && m<moves)
floodfill(i+2,j-1,m+1,c);
if(i+2<=7 && j+1<=7 && (arr[i+2][j+1]=='P' || arr[i+2][j+1]=='.') && chk[i+2][j+1]>m && m<moves)
floodfill(i+2,j+1,m+1,c);
if(i-1>=0 && j-2>=0 && (arr[i-1][j-2]=='P' || arr[i-1][j-2]=='.') && chk[i-1][j-2]>m && m<moves)
floodfill(i-1,j-2,m+1,c);
if(i-1>=0 && j+2<=7 && (arr[i-1][j+2]=='P' || arr[i-1][j+2]=='.') && chk[i-1][j+2]>m && m<moves)
floodfill(i-1,j+2,m+1,c);
if(i+1<=7 && j-2>=0 && (arr[i+1][j-2]=='P' || arr[i+1][j-2]=='.') && chk[i+1][j-2]>m && m<moves)
floodfill(i+1,j-2,m+1,c);
if(i+1<=7 && j+2<=7 && (arr[i+1][j+2]=='P' || arr[i+1][j+2]=='.') && chk[i+1][j+2]>m && m<moves)
floodfill(i+1,j+2,m+1,c);
}
int main()
{
int t;
cin>>t;
while(t--)
{
int i,j,k,x,y;
cin>>moves;
int count=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chk[i][j]=moves+2;
cin>>arr[i][j];
if(arr[i][j]=='k')
{
x=i;
y=j;
}
if(arr[i][j]=='P')
count++;
}
}
bool f=0;
floodfill(x,y,0,count);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(arr[i][j]=='P')
{
f=1;
break;
}
}
}
if(f)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
system("pause");
return 0;
}