OD 机试 病毒感染

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 1,0,1,0,0,0,1,0,1
        while (in.hasNext()) {
            String string = in.nextLine();
            if (string.length() <= 0) {
                return;
            }
            String[] arr = string.split(",");
            int len = arr.length;
            int pow = (int) Math.pow(len, 0.5);
//            System.out.println(pow + " + " + Arrays.toString(arr));
            int[][] ints = new int[pow][pow];

            for (int i = 0; i < len; i = i+pow) {
                int hang = i / pow;
                for (int j = i; j < i + pow; j++) {
                    int lie = j - i;
                    ints[hang][lie] = Integer.parseInt(arr[j]);
                }
            }
//            System.out.println(Arrays.toString(ints[0]));
//            System.out.println(Arrays.toString(ints[1]));
//            System.out.println(Arrays.toString(ints[2]));
            int count = 0;
            while (h0(ints)) {
                // 继续感染
                count++;
                for (int i = 0; i < ints.length; i++) {
                    for (int j = 0; j < ints[i].length; j++) {
                        if (ints[i][j] != 0) {
                            f(ints, i, j, ints[i][j]);
//                            System.out.println(Arrays.toString(ints[0]));
//                            System.out.println(Arrays.toString(ints[1]));
//                            System.out.println(Arrays.toString(ints[2]));
                        }
                    }
                }
            }
            if (count != 0) {
                System.out.println(count + 1);
            } else {
                System.out.println(count);
            }
        }
    }
    // 判断是否结束 还有没有存在为0的
    private static boolean h0(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] == 0) { // TODO
                    return true;
                }
            }
        }
        return false;
    }
    // 判断是否感染
    private static boolean h1(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] == 1) {
                    return true;
                }
            }
        }
        return false;
    }
    // 感染
    private static void f(int[][] arr, int i, int j, int couunt) {
        if (arr[i][j] == 0) {
            arr[i][j] = couunt + 1;
            return;
        }
        if (j-1 >= 0  && j-1 >= 0 && arr[i][j-1] == 0) { // 范围限制 TODO
            f(arr, i, j-1,couunt +1);
        }
        if (j+1 < arr[i].length  && j+1 < arr[i].length && arr[i][j+1] == 0) {
            f(arr, i, j+1,couunt+ 1);
        }
        if (i+1 < arr.length  && i+1 >= 0 && arr[i+1][j] == 0) {
            f(arr, i+1, j, couunt + 1);
        }
        if (i-1 >= 0  && i-1 < arr.length && arr[i-1][j] == 0) {
            f(arr, i-1, j, couunt + 1);
        }
    }
}

 

posted @ 2022-05-23 08:56  信念是基石  阅读(71)  评论(0编辑  收藏  举报
跟随粒子特效