国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

UVA 11624 Fire!(BFS)

2019-11-08 18:42:42
字體:
來源:轉載
供稿:網友

題目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_PRoblem&problem=2671

思路:預處理出火到每個格子的最短時間,BFS即可。

#include<cstdio>#include<queue>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=1000+50;const int INF=0x3f3f3f3f;const int dx[]= {-1,1,0,0};const int dy[]= {0,0,-1,1};struct Node{    int x,y,t;    Node(int x=0,int y=0,int t=0):x(x),y(y),t(t) {}};int r,c;queue<Node> q;int vis[maxn][maxn];char st[maxn][maxn];int fire[maxn][maxn];int isIn(int x,int y){    return x>=0&&x<r&&y>=0&&y<c;}int isOut(int x,int y){    return x==0||y==0||x==r-1||y==c-1;}void prepare(){    while(!q.empty())    {        Node now=q.front();        q.pop();        for(int i=0; i<4; i++)        {            Node nt;            nt.x=now.x+dx[i];            nt.y=now.y+dy[i];            nt.t=now.t+1;            if(isIn(nt.x,nt.y)&&!vis[nt.x][nt.y]&&st[nt.x][nt.y]!='#')            {                vis[nt.x][nt.y]=1;                fire[nt.x][nt.y]=min(fire[nt.x][nt.y],nt.t);                q.push(nt);            }        }    }}void init(){    for(int i=0; i<r; i++)        for(int j=0; j<c; j++)            fire[i][j]=INF;    while(!q.empty()) q.pop();    memset(vis,0,sizeof(vis));}void solve(int x,int y){    int flag=0,ans;    Node tmp=(Node)    {        x,y,0    };    while(!q.empty()) q.pop();    memset(vis,0,sizeof(vis));    q.push(tmp),vis[x][y]=1;    while(!q.empty())    {        Node now=q.front();        q.pop();        if(isOut(now.x,now.y))        {            flag=1;            ans=now.t;            break;        }        for(int i=0; i<4; i++)        {            Node nt;            nt.x=now.x+dx[i];            nt.y=now.y+dy[i];            nt.t=now.t+1;            if(isIn(nt.x,nt.y)&&!vis[nt.x][nt.y]&&st[nt.x][nt.y]!='#'&&nt.t<fire[nt.x][nt.y])            {                vis[nt.x][nt.y]=1;                q.push(nt);            }        }    }    if(flag) printf("%d/n",ans+1);    else printf("IMPOSSIBLE/n");}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int stx,sty;        scanf("%d%d",&r,&c);        init();        for(int i=0; i<r; i++)        {            getchar();            scanf("%s",st[i]);            for(int j=0; j<c; j++)            {                if(st[i][j]=='F')                {                    q.push(Node(i,j,0));                    fire[i][j]=0,vis[i][j]=1;                }                else if(st[i][j]=='J') stx=i,sty=j;            }        }        prepare();        solve(stx,sty);    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林口县| 化州市| 湖南省| 诏安县| 连平县| 开远市| 桃源县| 霞浦县| 化隆| 天峻县| 惠水县| 宁城县| 常熟市| 洛浦县| 靖西县| 东港市| 昌江| 肇东市| 马关县| 绵阳市| 赤峰市| 时尚| 淳化县| 新河县| 杨浦区| 油尖旺区| 亚东县| 彩票| 互助| 石泉县| 滦平县| 平和县| 罗定市| 德安县| 连州市| 北碚区| 赞皇县| 南安市| 灵山县| 鄱阳县| 常熟市|