UVA 11624 Fire!

UVA的题没法愉快的复制粘贴,所以直接上链接吧(汗。


https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2671


这个题一开始没好好看,结果迷之TLE两次。搞了半天原来是我没看到起火点可能不止一处…………

看到有大牛的代码就开了一个队列,把火和人放一块,一次bfs搞定,不过我太弱了做不到OTZ

我写的方法就是先把火会到的地点的时间记录一下,然后再让人走,人走的步数和火会烧到的时间做一下对比,如果步数大于等于时间的话,这一块就不能走。

总的来说还是bfs了两次。


题意:J被困在了一个地方,这个地方有一些墙#和火源F,火源F每一刻都会向上下左右扩散,扩散的地方就不能走了。只要走到边界处,J就能离开这里。问:J能离开吗?能的话最少需要多长时间?


#include
#include
#include
#include
#define INF 0x3f3f3f3f
using namespace std;
int R,C,x1,y1,k;
int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int num1[1010][1010],num2[1010][1010];
char map[1010][1010];
struct node 
{
	int x,y;
}a[1010*1010];
int OK(node a)
{
	if(a.x>=0&&a.y>=0&&a.x q;
	for(i=0;i q;
	now.x=x1,now.y=y1;
	num2[now.x][now.y]=1;
	q.push(now);
	while(!q.empty())
	{
		now=q.front();
		q.pop();
		if(now.x==0||now.y==0||now.x==R-1||now.y==C-1)
			if(num2[now.x][now.y]


你可能感兴趣的:(搜索)