Fire! UVA - 11624 解题报告

逐渐唤醒被寒假尘封的搜索知识!

题目大意:JAKE跟一团火呆在一个迷宫里,注意火每分钟会向四个方向同时蔓延,问JAKE能否及时逃出去,我们假设只要JAKE走到边缘就算已经走出。

思路:稍微带一点技巧性的BFS,首先我们BFS跑一遍火的时间,然后再跑一边JAKE的时间两者进行比对,得出最后结果。

下面给出AC代码:


#include 
using namespace std;
typedef long long ll;
const int maxn=1000+100;
const int INF=0x3f3f3f3f;
struct node
{
    int x,y;
};

int m,n;
char c[maxn][maxn];
int st1[maxn][maxn],st2[maxn][maxn];
bool used[maxn][maxn];
int idx[4]= {1,0,-1,0};
int idy[4]= {0,1,0,-1};

void BFS_Fire(int st[][maxn],node post)
{
    queue que;
    que.push(post);
    used[post.x][post.y]=true;
    st[post.x][post.y]=0;
    while(!que.empty())
    {
        node pos=que.front();
        que.pop();
        for(int i=0; i<4; i++)
        {
            int nx=pos.x+idx[i];
            int ny=pos.y+idy[i];
            if(nx>=0&&nx=0&&ny=(st[pos.x][pos.y]+1))
            {
                st[nx][ny]=st[pos.x][pos.y]+1;
                used[nx][ny]=true;
                que.push(node{nx,ny});
            }
        }
    }
}

void BFS_J(int st[][maxn],node post)
{
    queue que;
    que.push(post);
    used[post.x][post.y]=true;
    st[post.x][post.y]=0;
    while(!que.empty())
    {
        node pos=que.front();
        que.pop();
        for(int i=0; i<4; i++)
        {
            int nx=pos.x+idx[i];
            int ny=pos.y+idy[i];
            if(nx>=0&&nx=0&&ny

 

你可能感兴趣的:(ACM补题集,DFS,BFS)