火星改造

作者: 何以解君愁 | 来源:发表于2025-11-25 13:52 被阅读0次

 2XXX 年,人类通过对火星的大气进行宜居改造分析,使得火星已在理论上具备人类宜居的条件;
 由于技术原因,无法一次性将火星大气全部改造,只能通过局部处理形式;
 假设将火星待改造的区域为 row * column 的网格,每个网格有 3 个值,宜居区、可改造区、死亡区,使用 YES、NO、NA 代替:

 YES 表示该网格已经完成大气改造;
 NO 表示该网格未进行改造,后期可进行改造;
 NA 表示死亡区,不作为判断是否改造完成的宜居,无法穿过;
 初始化下,该区域可能存在多个宜居区,并且每个宜居区能同时在每个太阳日单位向上下左右四个方向的相邻格子进行扩散,自动将 4 个方向相邻的真空区改造成宜居区;
 请计算这个待改造区域的网格中,可改造区是否能全部变成宜居区,如果可以,则返回改造的太阳日天数,不可以则返回-1。
 输入描述
  输入 row * column 个网格数据,每个网格值枚举值如下:YES,NO,NA;
  样例:

       YES YES NO
       NO NO NO
       NA NO YES

 输出描述:可改造区是否能全部变成宜居区,如果可以,则返回改造的太阳日天数,不可以则返回-1

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        List<String> temp = new ArrayList<>();
        while(sc.hasNextLine()){
            String s = sc.nextLine().trim();
            if(s.isEmpty()){
                break;
            }
            temp.add(s);
        }
        //接收参数
        String[] lengthGet = temp.get(0).split("[ ]");
        String[][] check = new String[temp.size()][lengthGet.length];
        for(int i = 0;i < temp.size();i++){
            String[] tempValue = temp.get(i).split("[ ]");
            for(int j = 0;j < tempValue.length;j++){
                check[i][j] = tempValue[j];
            }
        }
        //行列简写
        int m = check.length;
        int n = check[0].length;
        //计算待改造数
        int noCheck = 0;
        //队列存放YES坐标
        Deque<Integer> yesCheck = new ArrayDeque<>();
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                if(check[i][j].equals("YES")){
                    //存放坐标
                    yesCheck.offer(i * n + j);
                }else if(check[i][j].equals("NO")){
                    noCheck++;
                }
            }
        }
        
        if(noCheck == 0){
            //开始就改造完了
            System.out.print("0");
        }else{
            int time = 0;
            //存在没有改造完的
            while(noCheck > 0&&!yesCheck.isEmpty()){
                time++;
                //多个yes一起执行
                int length = yesCheck.size();
                for(int i = 0;i < length;i++){
                    int index = yesCheck.poll();
                    //得到行列
                    int col = index / n;
                    int row = index % n;
                    //处理上下左右
                    if(col - 1 > -1&&check[col - 1][row].equals("NO")){
                        noCheck--;
                        check[col - 1][row] = "YES";
                        yesCheck.offer((col - 1) * n + row);
                    }
                    if(col + 1 < m&&check[col + 1][row].equals("NO")){
                        noCheck--;
                        check[col + 1][row] = "YES";
                        yesCheck.offer((col + 1) * n + row);
                    }
                    if(row - 1 > -1&&check[col][row - 1].equals("NO")){
                        noCheck--;
                        check[col][row - 1] = "YES";
                        yesCheck.offer(col * n + row - 1);
                    }
                    if(row + 1 < n&&check[col][row + 1].equals("NO")){
                        noCheck--;
                        check[col][row + 1] = "YES";
                        yesCheck.offer(col * n + row + 1);
                    }
                }
            }
            //返回改造完或未改造完的结果
            System.out.println(noCheck == 0 ? time : -1);
        }
    }
}

相关文章

  • 改造火星

    火星是一个多水的星球,但是现在都以固态冰的形式存在。即使温度升高,火星也不会重新成为拥有海洋的星球;冰会融化成水进...

  • 动物王国。

    上次说到大头薯派的卫星成功的拍摄了火星图片,这次大头鼠直接决定改造火星,这是他的改造方案。 绿色...

  • 知了晚汇:狂语--钢铁侠马斯克要炸火星!蜜语--白宫社交媒体秀奥

    一、钢铁侠马斯克要改造火星--核轰炸 NASA关于火星上有液态水的消息,再次激发了钢铁侠马斯克移民火星的梦想。他再...

  • 《2663年的火星》

    转眼间来到了2663年的火星,我们来到了火星上生存,地球将不复存在,科学家把火星改造的非常壮观,简直和地球差不多...

  • 人侵 1

    数万年前,人类逃撤到了火星上。不久之后他们便将火星改造,使得原本贫瘠的火星,有了与曾经地球上一样的生机。往后,...

  • 人侵

    数千年前,人类逃撤到了火星上。不久之后他们便将火星改造,使得原本贫瘠的火星,有了与曾经地球上一样的生机。往后,...

  • 人侵 1

    数千年前,人类逃撤到了火星上。不久之后他们便将火星改造,使得原本贫瘠的火星,有了与曾经地球上一样的生机。往后,...

  • 小咪说:人类未来3

    大家好 我是外星人小咪 咱们接着昨天的话题继续讲 怎么在火星上改造? 那就是用温室效应加热火星。 火星的气温只需要...

  • 你的孩子也许就讲在火星生存

    主讲人有个疯狂的设想说2050年人类将征服火星,在火星居住将那里改造成另一个地球!虽然火星地表没有水,空气成分96...

  • 火星团长游历地球

    记者 | 张红举编辑 | Emily 据说人类只有通过基因改造才能确保在火星上存活。而如今有位火星团长来地球转一遭...

网友评论

    本文标题:火星改造

    本文链接:https://www.haomeiwen.com/subject/udortstx.html