/*
hdu Dating with girls(2) bfs加點東西 水題
一開始還以爲就是bfs,然後判斷一下那個時候石頭是否消失
但是沒有發現,路是可以重走的,,因爲你可能到某個石頭那兒時,他快消失了,但是還沒有消失
你就需要再遛遛,浪費點兒時間,浪費的時間若是k的整數倍,相當於沒有浪費
所以需要對k取餘
*/
#include<iostream>
#include<queue>
#include<string>
using namespace std;
char map[110][110];
int r,c,k;
int x1,x2,y1,y2;
int vis[11][110][110];
int dir[][2]={0,1, 1,0, -1,0, 0,-1};
struct node
{
int x,y,n;
};
int ok(node a)
{
int x=a.x,y=a.y,n=a.n;
if(vis[n%k][x][y])
{
return 0;
}
if(x<0||x>=r)
return 0;
if(y<0||y>=c)
return 0;
if(map[x][y]=='.')
return 1;
if(map[x][y]=='Y'||map[x][y]=='G')
return 1;
if(map[x][y]=='#'&&n%k==0)
{
return 1;
}else
{
return 0;
}
}
int main()
{
int t,i,j,flag;
char cha;
cin>>t;
while(t--)
{
flag=0;
cin>>r>>c>>k;
getchar();
for(i=0;i<r;++i)
{
//getline(cin,map[i]);
gets(map[i]);
}
for(i=0;i<r;++i)
{
for(j=0;j<c;++j)
{
if(map[i][j]=='Y')
{
x1=i,y1=j;
}else if(map[i][j]=='G')
{
x2=i,y2=j;
}
}
}
memset(vis,0,sizeof(vis));
queue<node> q;
node nod;
nod.x=x1,nod.y=y1,nod.n=0;
q.push(nod);
vis[0][x1][y1]=1;
while(!q.empty())
{
int kk;
node cur=q.front(),next;
q.pop();
for(kk=0;kk<4;++kk)
{
next.x=cur.x+dir[kk][0];
next.y=cur.y+dir[kk][1];
next.n=cur.n+1;
if(ok(next))
{
vis[next.n%k][next.x][next.y]=1;
if(next.x==x2&&next.y==y2)
{
flag=next.n;
break;
}
q.push(next);
}
}
if(flag)
break;
}
if(flag)
{
cout<<flag<<endl;
}else
{
cout<<"Please give me another chance!"<<endl;
}
}
return 0;
}
hdu Dating with girls(2) bfs加點東西 水題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.