UVa11624-Fire!(bfs)

来源:互联网 发布:查微信聊天记录的软件 编辑:程序博客网 时间:2024/06/16 07:53

题目链接

分析:
火是不会自动熄灭的
所以我们先预处理出火蔓延到每一个格子的最早时间
然后bfsJoe的行动路线就可以了

tip

我把所有的信息都放在一个矩阵中维护
结果就一直WA
然后我就把火和地图两个信息分别维护
就变成了RE
(鬼知道为什么。。。有人愿意解答吗???!!!)

//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int N=1002;int zz[4][2]={{1,0},{0,1},{-1,0},{0,-1}};int mp[N][N],xx,yy;int n,m,f[N][N];int q[N*N][2],tou,wei;void bfs1(){    do    {        int x=q[++tou][0];        int y=q[tou][1];        int time=f[x][y]+1;        int xa,ya;        for (int i=0;i<4;i++)        {            xa=x+zz[i][0];            ya=y+zz[i][1];            if (xa>n||ya>m||xa<1||ya<1||f[xa][ya]!=0||mp[xa][ya]==-1) continue;            f[xa][ya]=time;            wei++;            q[wei][0]=xa;            q[wei][1]=ya;        }    }    while (tou<wei);}int bfs2(){    tou=wei=0;    q[++wei][0]=xx;    q[wei][1]=yy;    mp[xx][yy]=1;    do    {        int x=q[++tou][0];        int y=q[tou][1];        int xa,ya;        if (x>=n||y>=m||x<=1||y<=1) return mp[x][y];        int time=mp[x][y]+1;        for (int i=0;i<4;i++)        {            xa=x+zz[i][0];            ya=y+zz[i][1];            if (mp[xa][ya]==-1||f[xa][ya]<=time) continue;            mp[xa][ya]=time;            wei++;            q[wei][0]=xa;            q[wei][1]=ya;        }    }    while (tou<wei);    return 0;}int main(){    int T;    scanf("%d",&T);    while (T--)    {        memset(mp,0,sizeof(mp));        memset(f,0,sizeof(f));        tou=wei=0;        scanf("%d%d",&n,&m);        char s[N];        for (int i=1;i<=n;i++)        {            scanf("%s",&s);            for (int j=0;j<m;j++)                if (s[j]=='#') mp[i][j+1]=-1;                else if (s[j]=='F')                {                    q[++wei][0]=i;                    q[wei][1]=j+1;                    f[i][j+1]=1;                }                else if (s[j]=='J') xx=i,yy=j+1;        }        bfs1();   //fire        int ans=bfs2();        if (ans>0)  //Jeo            printf("%d\n",ans);           else printf("IMPOSSIBLE\n");    }    return 0;}
原创粉丝点击