hdu Dating with girls(2) bfs加點東西 水題

/*
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;
}

發佈了202 篇原創文章 · 獲贊 9 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章