计算疫情扩散时间 --- 菊花厂刷题记录

题目描述

在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。 感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算,多少天以后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染,或者没有被感染区域,返回-1

输入描述

一行N*N个数字(只包含0,1,不会有其他数字)表示一个地图,数字间用,分割,0表示未感染区域,1表示已经感染区域 每N个数字表示地图中一行,输入数据共表示N行N列的区域地图。

例如输入1,0,1,0,0,0,1,0,1,表示地图

1,0,1
0,0,0
1,0,1

输出描述

一个整数,表示经过多少天以后,全部区域都被感染 1<=N<200

用例

输入 1,0,1,0,0,0,1,0,1
输出 2
说明 1天以后,地图中仅剩余中心点未被感染;2天以后,全部被感染。
输入 1,1,1,1,1,1,1,1,1
输出 -1
说明 全部都感染

参考

计算疫情扩散时间(C++ Java JavaScript Python)

C++

#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;

int getResult(vector<int>& map) {
    int n = sqrt(map.size());

    vector<vector<int>> matrix(n, vector<int>(n)); // 将一维数组转换为二维矩阵

    queue<pair<int, int>> q; // 用队列存储感染区域

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            matrix[i][j] = map[i * n + j]; // 将一维数组转换为二维矩阵
            if (matrix[i][j] == 1) q.push({i, j}); // 将感染区域加入队列
        }
    }

    if (q.empty() || q.si

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试刷题 文章被收录于专栏

华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论
进来和佬刷题
点赞
送花
回复
分享
发布于 2023-03-30 13:30 山东

相关推荐

点赞 评论 收藏
转发
3 1 评论
分享
牛客网
牛客企业服务