1. 程式人生 > 其它 >OD 機試 病毒感染

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); } } }