bfs。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
const int maxN=110;
char map[maxN][maxN];
int n,m,dx[]={1,-1,0,0},dy[]={0,0,1,-1},k;
bool vis[maxN][maxN][20];
struct Point{
int x,y,time;
Point(int _x,int _y,int _time):x(_x),y(_y),time(_time){}
};
void bfs(int x,int y){
queue<Point> q;
q.push(Point(x,y,0));
memset(vis,false,sizeof(vis));
vis[x][y][0]=true;
while(!q.empty()){
Point p=q.front();q.pop();
if(map[p.x][p.y]=='G') {
cout<<p.time<<endl;
return;
}
for(int i=0;i<4;i++){
int nx=p.x+dx[i],ny=p.y+dy[i];
if(nx<0||nx>=n||ny<0||ny>=m||vis[nx][ny][(p.time+1)%k]) continue;
vis[nx][ny][(p.time+1)%k]=true;
if(map[nx][ny]=='#'){
if((p.time+1)%k==0) q.push(Point(nx,ny,p.time+1));
}
else q.push(Point(nx,ny,p.time+1));
}
}
cout<<"Please give me another chance!"<<endl;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
int t;
cin>>t;
while(t--){
cin>>n>>m>>k;
int sx,sy;
for(int i=0;i<n;i++){
scanf("%s",map[i]);
for(int j=0;j<m;j++)
if(map[i][j]=='Y')
sx=i,sy=j;
}
bfs(sx,sy);
}
return 0;
}