字节跳动-第二批笔试 油瓶个数
可以使用图的广度遍历完成油瓶数搜索,孤立的点将不会被处理 100%
package algorithm.bytecode; import java.util.*; public class First { public static void main(String[] args) { Scanner in = new Scanner(System.in); String mStr = in.nextLine(); int m = Integer.valueOf(mStr); int[][] mm = new int[m][m]; for (int i = 0; i < m; i++) { String line = in.nextLine(); mm[i] = parseIntArr(line); } int result = solution(mm); System.out.println(result); } public static int solution(int[][] data) { int length = data.length; boolean[] visited = new boolean[length]; Arrays.fill(visited, false); List<List<Integer>> result = new ArrayList<>(); Queue<Integer> queue = new LinkedList<>(); for (int i = 0; i < length; i++) { if (visited[i]) { continue; } List<Integer> list = new ArrayList<>(); queue.offer(i); visited[i] = true; while (!queue.isEmpty()) { int current = queue.poll(); list.add(current); for (int k = 0; k < length; k++) { if (visited[k]) continue; // 与current亲密度大于等于3 if (data[current][k] >= 3) { queue.offer(k); visited[k]=true; } } } result.add(list); } // System.out.println(result); int count = result.size(); for (int i = 0; i < length; i++) { if (!visited[i]) { count++; } } return count; } public static int[] parseIntArr(String line) { String[] strings = line.split(" "); int[] data = new int[strings.length]; for (int i = 0; i < strings.length; i++) { data[i] = Integer.valueOf(strings[i]); } return data; } }