当前位置: 首页 > news >正文

阳江网站设计公司西安网站建设资讯

阳江网站设计公司,西安网站建设资讯,su域名注册,做外贸网站渠道题目部分 题目计算疫情扩散时间难度难题目说明在一个地图中(地图由 n * n 个区域组成)有部分区域被感染病菌感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算多少天以后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染&#xff0…

题目部分

题目计算疫情扩散时间
难度
题目说明在一个地图中(地图由 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
输入1,0,1,0,0,0,1,0,1
输出2
说明1 天之后,地图上仅剩中心点未被感染;2 天之后,全部被感染。
示例2
输入0,0,0,0
输出-1
说明无感染区域
示例3
输入1,1,1,1,1,1,1,1,1
输出-1
说明已经全部被感染


解读与分析

题目解读

给定一个一维数组,数组中的数字为 0、1,把它转换成对应的二维数组。如果数组的初始值全为 0 或全为 1,返回 -1。每一天,数字为 1 的会把其上下左右 4 个方向的值改成 1。求多少天后,全部都变成 1。

分析与思路

实现机制比较简单,先解析输入数据,接着统计 0 和 1 的数字,之后把 1 上下左右的数字变成 1,再统计,直到所有的数据都变成 1。具体实现步骤如下:
1. 解析数据。把输入数据解析成一维数组,记录所有包含 1 的数组下标。
2. 统计。如果 1 的个数等于所有数字个数,或 1 的个数为 0,返回 -1。否则,进行第 3 步。
3. 初始换当前感染数据。
把所有值为 1 的数字下标放到集合中,设为 value1Set。
4. 更新感染数字。遍历 value1Set,计算当天之后所有值为 1 的下标,放到集合 newValue1Set中。当前天数加1。
5. 统计 newValue1Set 的元素个数,如果等于全部个数,则全部感染,返回当前天数。否则,把 newValue1Set 赋值给 value1Set,继续执行步骤 4。

此方法的时间复杂度为 O( n平方 ),空间复杂度为 O(n)。


代码实现

Java代码

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;/*** 计算疫情扩散时间* * @since 2023.11.01* @version 0.1* @author Frank**/
public class DiseaseSpread {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();String[] inputArr = input.split(",");int arrCount = inputArr.length;Set<Integer> diseaseSet = new HashSet<Integer>();for (int i = 0; i < arrCount; i++) {int value = Integer.parseInt(inputArr[i]);if (value == 1) {diseaseSet.add(i);}}processDiseaseSpread(arrCount, diseaseSet);}}private static void processDiseaseSpread(int arrCount, Set<Integer> diseaseSet) {if (diseaseSet.size() == 0 || diseaseSet.size() == arrCount) {System.out.println(-1);return;}int days = 0;// 避免误差,使用 Math.round。int dimension = (int) Math.round(Math.sqrt(arrCount));Set<Integer> newDiseaseSet = new HashSet<Integer>();newDiseaseSet.addAll(diseaseSet);while (diseaseSet.size() != arrCount) {for (Iterator<Integer> iter = diseaseSet.iterator(); iter.hasNext();) {int coords = iter.next();updateNewCoords(dimension, coords, newDiseaseSet);}days++;if (newDiseaseSet.size() == arrCount) {System.out.println(days);return;}diseaseSet = newDiseaseSet;}}private static void updateNewCoords(int dimension, int coords, Set<Integer> newDiseaseSet) {int i = coords / dimension;int j = coords % dimension;int[][] fourDirections = { { i, j - 1 }, { i, j + 1 }, { i - 1, j }, { i + 1, j } };for (int k = 0; k < fourDirections.length; k++) {int curI = fourDirections[k][0];int curJ = fourDirections[k][1];if (curI < 0 || curJ < 0 || curI >= dimension || curJ >= dimension) {continue;}Integer curCoords = curI * dimension + curJ;if (!newDiseaseSet.contains(curCoords)) {newDiseaseSet.add(curCoords);}}}}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var inputArr = line.split(",");var arrCount = inputArr.length;var diseaseSet = new Set();for (var i = 0; i < arrCount; i++) {var value = parseInt(inputArr[i]);if (value == 1) {diseaseSet.add(i);}}processDiseaseSpread(arrCount, diseaseSet);}
}();function processDiseaseSpread(arrCount, diseaseSet) {if (diseaseSet.size == 0 || diseaseSet.size == arrCount) {console.log(-1);return;}var days = 0;// 避免误差,使用 Math.round。var dimension = Math.round(Math.sqrt(arrCount));while (diseaseSet.size != arrCount) {var newDiseaseSet = new Set();for (var i of diseaseSet) {newDiseaseSet.add(i);updateNewCoords(dimension, i, newDiseaseSet);}days++;if (newDiseaseSet.size == arrCount) {console.log(days);return;}diseaseSet = newDiseaseSet;}
}function updateNewCoords(dimension, coords, newDiseaseSet) {var i = parseInt(coords / dimension);var j = coords % dimension;var fourDirections = [[i, j - 1],[i, j + 1],[i - 1, j],[i + 1, j]];for (var k = 0; k < fourDirections.length; k++) {var curI = fourDirections[k][0];var curJ = fourDirections[k][1];if (curI < 0 || curJ < 0 || curI >= dimension || curJ >= dimension) {continue;}var curCoords = curI * dimension + curJ;if (!newDiseaseSet.has(curCoords)) {newDiseaseSet.add(curCoords);}}}

(完)

http://www.yayakq.cn/news/809555/

相关文章:

  • 阿里巴巴黄页网站c2c模式的基本要素不包括( )?
  • 用cms做个网站建设信息港网站
  • 装饰行业网站模板网站设计技术有哪些?
  • 企业门户网站建设黑帽seo
  • 怎么做可以聊天的网站教育培训机构排名前十
  • 建设银行网站图片大全wordpress king
  • 怎样建设门户网站网站流量图怎么做
  • 外贸公司英文网站WordPress 微信采集助手
  • 找网站做q币58同城泉州网站建设
  • 购买域名后如何建设网站用lls建设一个网站
  • 关于做甜品的网站做网站找八埏
  • 百度短链接六年级下册数学优化设计答案
  • 岳阳网站建设联系方式wordpress文章图片点击放大浏览
  • 织梦cms网站模板修改网站开发网站设计
  • 曼朗策划网站建设有那些网站可以做推广
  • 旅游网站建设报价方案上地网站制作
  • 四川省建设厅中心网站阳江房产网签查询
  • 常州网站建设软件建网站 就能开店
  • 个人免费域名空间建站wordpress 有没有上级目录的写权限
  • 温州网站建设公司公司哪家好2018建设工程管理招团支部网站
  • 杭州电商网站开发wordpress会员中心模板下载
  • 做网站要做哪些vi设计的流程
  • 域通联达网站电子商务网站建设合同
  • 网站被入侵后需做的检测 1有什么网站做知识吗
  • 建设淘宝客网站源码怎么弄开发网站的硬件成本
  • 九宫格导航网站天津体验网站
  • 厦门上网站设计建设北京服装设计公司前十名
  • 网站做电子商务需要什么资质wordpress收费注册
  • 中国十大黄页网站排行榜wordpress静态cdn
  • asp网站源码下载杭州点餐app开发