• 123


    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <utility> 
    
    using namespace std;
    
    int r,c;
    int map[1010][1010];
    int time[1010][1010];
    int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
    queue< pair<int,int> > J; //声明方式
    queue< pair<int,int> > F;
    
    void print()
    {
        int i,j;
        for(i = 0; i < r+1; i++)
        {
            for(j = 0; j<c+1; j++)
            {
                printf("%d ",time[i][j]);
            }
            printf("
    ");
        }
        printf("
    ");
    }
    
    void bfs_fire()
    {
        pair<int, int> FF;
        int t, i, x, y;
    
        while( !F.empty() )
        {            
            FF = F.front();
            F.pop();        
            t = time[FF.first][FF.second];    
            for( i = 0; i < 4; i++)
            {
                x = FF.first + dir[i][0];
                y = FF.second + dir[i][1];
                if(x >= r || x < 0 || y >= c || y < 0)//越界
                    continue;            
                if( time[x][y] == 0 )
                {
                    time[x][y] = t + 1;
                    F.push(make_pair(x, y));
                }
            }
        }
    }
    
    void bfs_people()
    {
        pair<int,int> JJ;
        int t, i, x, y, ok = 0;    
    
        while( !J.empty() )
        {    
            JJ = J.front();
            J.pop();
            t = map[JJ.first][JJ.second];
            map[JJ.first][JJ.second] = -1;//标记访问(把这个地方变成墙就行)
            for( i = 0; i < 4; i++)//向四个方向扩展(能走的)
            {
                x = JJ.first + dir[i][0];
                y = JJ.second + dir[i][1]; //pair 具有 first 与 second 成员
                if(x >= r || x < 0 || y >= c || y < 0)//越界
                    continue;
                if( map[x][y] == -1 || map[x][y] <= time)//墙或超时
                    continue;
                else if( x == r - 1 || x == 0 || y == 0 || y == c - 1 )//边界则走完
                {
                    ok = 1;
                    printf("%d
    ", time);
                    return;
                }
                else
                {
                    J.push(make_pair(x, y));//queue中插入pair   利用make_pair()方法
                }
            }    
        
        }
        if(ok == 0)     
            printf("IMPOSSIBLE
    ");
    }
    */
    
    int main()
    {
        int N;
        int i,j;
        char temp;
    
        freopen("1.txt", "r", stdin);
        scanf("%d", &N);
        getchar();
        while(N--)
        {
            while( !J.empty() ) J.pop(); //注意初始化(清空)队列
            while( !F.empty() ) F.pop();
            memset(map, -1, sizeof(map));
            memset(time, -1, sizeof(time));
    
            scanf("%d%d", &r, &c);
            getchar();
    
            for(i = 0; i < r; i++)
            {
                for(j = 0; j < c; j++)
                {//# = -1     F = 1     . = 0
                    scanf("%c", &temp);//当读取%c时,注意用getchar吸收掉不必要的回车
                    if(temp == '#'){map[i][j] = time[i][j] = -1;}
                    else if(temp == 'F'){map[i][j] = time[i][j] = 1;F.push(make_pair(i,j));}      
                    else if(temp == 'J'){map[i][j] = 1;time[i][j] = 0;J.push(make_pair(i,j));}      
                    else{map[i][j] = time[i][j] = 0;}
                }
                getchar();
            }
            bfs_fire();        
    //        bfs_people();
        }
        return 0;
    }
  • 相关阅读:
    Laravel 5.7 RCE (CVE-2019-9081)
    Laravel 5.8 RCE 分析
    CVE-2018-12613 的一些思考
    2019CISCN华南线下两道web复现
    Intellij idea导入项目时没有目录结构
    [BZOJ4907]柠檬
    [BZOJ3675]序列分割
    aes加解密
    java:基于redis实现分布式定时任务
    PBKDF2加密
  • 原文地址:https://www.cnblogs.com/wwjyt/p/3154124.html
Copyright © 2020-2023  润新知