【BFS】FZU 2150 Fire Game

21 篇文章 0 订阅

Problem Description

给你T组数据,给你一个n,m的矩阵,.#分别代表空地,草丛。让你找两个草丛,开始烧,要求把所有的草都烧完,所需要最少的时间。烧一个草可以向上下左右扩散,扩散时间+1.

代码:找到所有草地下标。两两遍历所有的草丛,求出最小

#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
struct node
{
    int x, y;
};
vector<node> a;//存#的下标
char Map[15][15];
int vis[15][15], n, m, ans, sum;//标记&&路径,行,列,结果,每次BFS的结果。
int X[5] = {0, 1, 0, -1};//各个方向
int Y[5] = {-1, 0, 1, 0};
queue<node> q;
int judge(int x1, int y1)//判断能不能烧
{
    if(x1 >= 0 && y1 >= 0 && x1 < n && y1 < m && Map[x1][y1] == '#' && !vis[x1][y1])
    {
        return 1;
    }
    else return 0;
}
void BFS(node u, node v)
{
    int i, j;
    memset(vis, 0, sizeof(vis));
    q.push(u); q.push(v);
    vis[u.x][u.y] = 1; vis[v.x][v.y] = 1;//初始化为1后面-1就好
    node t, tem;
    while(!q.empty())
    {
        t = q.front();
        int xx = t.x, yy = t.y;
        q.pop();
        for(i = 0; i < 4; i++)
        {
            if(judge(X[i] + xx, Y[i] + yy))
            {
                vis[X[i] + xx][Y[i] + yy] = vis[xx][yy] + 1;
                sum = max(sum, vis[xx][yy] + 1);
                tem.x = X[i] + xx; tem.y = Y[i] + yy;
                q.push(tem);

            }
        }
    }
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
        {
            if(Map[i][j] == '#')
            {
                if(vis[i][j] == 0) break;
            }
        }
        if(j != m) break;
    }
    if(i == n)
    {
        ans = min(ans, sum - 1);
    }
}
int main()
{
    int T, i, j, cas = 1;
    scanf("%d", &T);
    while(T--)
    {
        ans = 100;
        scanf("%d %d", &n, &m);
        for(i = 0; i < n; i++)
        {
            scanf("%s", Map[i]);
            for(j = 0; j < m; j++)
            {
                if(Map[i][j] == '#')//找出所有的#
                {
                    a.push_back((node){i,j});
                }
            }
        }
        for(i = 0; i < a.size(); i++)
        {
            for(j = i; j < a.size(); j++)//遍历所有草地的情况
            {
                sum = 1;
                BFS(a[i], a[j]);
            }
        }
        if(ans == 100) printf("Case %d: -1\n", cas++);
        else
        printf("Case %d: %d\n", cas++, ans);
        a.clear();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过信息化手段提升教育、管理和服务水平,实现资源数字化、工作流程化、管理高效化和决策智能化。方案包括智慧校园信息化平台和安防平台的建设,涉及教学、科研、管理和服务等多个方面,以满足现代教育和培训需求。 技术服务要求强调了统一支撑平台的建设,包括数据标准、接口标准、代码标准和用户信息标准的统一制定。平台需满足信创和X86交叉适配要求,确保安全自主可控的系统开发环境。此外,方案还涵盖了用户中心系统、统一认证授权中心、统一工作流中心、统一智能报表中心等多个模块,以及数据共享中心、语音识别、移动服务终端等功能,以实现校园内外部信息的互联互通和资源共享。 智慧校园信息化平台的建设还包括了对教学管理、人事管理、公文管理、档案管理、即时通讯、会议管理、督办工作、资产管理等方面的数字化和自动化升级。这些模块的集成旨在提高工作效率,优化资源配置,加强监督管理,并通过移动应用等技术手段,实现随时随地的信息访问和业务处理。 安防平台的建设则侧重于校园安全,包括停车场管理、人脸识别测温、访客自助登记、视频监控等多个系统。这些系统的集成旨在提高校园的安全管理水平,实现对校园内外人员和车辆的有效监控和管理,确保校园环境的安全稳定。 最后,方案还提到了对固定资产的管理,包括购置、使用、归还、报废等全生命周期的管理,以及对网络设备、安防设备、服务器等硬件设施的配置和管理。通过这些措施,智慧校园建设方案旨在为校园提供一个安全、高效、便捷的学习和工作环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值