目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 1、输入
- 2、输出
- 3、说明
- 四、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
服务器连接方式包括直接相连,间接连接。A 和 B 直接连接,B 和 C 直接连接,则 A 和 C 间接连接。直接连接和间接连接都可以发送广播。
给出一个 N * N 数组,代表 N 个服务器,matrix[i][j] == 1,则代表 i 和 j 直接连接;不等于 1 时,代表 i 和 j 不直接连接。
matrix[i][i] == 1,即自己和自己直接连接。matrix[i][j] == matrix[j][i]。
计算初始需要给几台服务器广播,才可以使每个服务器都收到广播。
二、输入描述
输入描述输入为 N 行,每行有 N 个数字,为 0 或 1,由空格分隔,构成 N * N 的数组,N 的范围为 1 <= N <= 50。
三、输出描述
输出一个数字,为需要广播的服务器数量。
1、输入
1 0 0
0 1 0
0 0 1
2、输出
3
3、说明
3 台服务器相互不连接,所以需要分别广播这 3 台服务器。
四、Java算法源码
public class OdTest {/*** 1 0 0* 0 1 0* 0 0 1* <p>* 3** == 1,即自己和自己直接连接。* != 1,不连接** 输出一个数字,为需要广播的服务器数量。*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] lineArr = sc.nextLine().split(" ");int N = lineArr.length;// 输入的矩阵int[][] matrix = new int[N][N];for (int i = 1; i < N; i++) {lineArr = sc.nextLine().split(" ");int[] tempArr = new int[N];for (int j = 0; j < N; j++) {tempArr[j] = Integer.parseInt(lineArr[j]);}matrix[i] = tempArr;}Set<Integer> usedSet = new HashSet<Integer>();List<Set<Integer>> connectionList = new ArrayList<Set<Integer>>();for (int i = 0; i < matrix.length; i++) {if (usedSet.contains(i)) {continue;}Set<Integer> newConnectionSet = new HashSet<Integer>();usedSet.add(i);newConnectionSet.add(i);initConnectionSet(i, usedSet, newConnectionSet, matrix);connectionList.add(newConnectionSet);}System.out.println(connectionList.size());}private static void initConnectionSet(int idx, Set<Integer> usedSet, Set<Integer> newConnectionSet, int matrix[][]) {for (int i = 0; i < matrix.length; i++) {if (i == idx) {continue;}int idxCheck = matrix[idx][i];if (usedSet.contains(i) || idxCheck == 0) {continue;}usedSet.add(i);newConnectionSet.add(i);initConnectionSet(i, usedSet, newConnectionSet, matrix);}}
}
六、效果展示
1、输入
1 0 0
0 1 0
0 0 1
2、输出
3
3、说明
🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。