服务器广播

2025-03-29 02:35:27阅读 4评论 0

题目描述

服务器连接方式包括直接相连,间接连接。
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 <= 40
输出
输出一个数字,为需要广播的服务器的数量

用例一
输入
1 0 0
0 1 0
0 0 1
输出
3
说明
3 台服务器互不连接,所以需要分别广播这 3 台服务器

用例二
输入
1 1
1 1
输出
1
说明
2 台服务器相互连接,所以只需要广播其中一台服务器

代码实现

import java.util.*;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<List<Integer>> list = new ArrayList<>();
        String s = scanner.nextLine();
        String[] strings = s.split(" ");
        List<Integer> collect = Arrays.stream(strings).map(Integer::valueOf).collect(Collectors.toList());
        list.add(collect);
        int num = collect.size();

        //将数据转换成二维数组
        for (int i = 0; i < num-1; i++) {
            s = scanner.nextLine();
            strings = s.split(" ");
            collect = Arrays.stream(strings).map(Integer::valueOf).collect(Collectors.toList());
            list.add(collect);
        }

        //存放要联通的机器,set中存放该机器可联通的机器编号
        List<Set<Integer>> res = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            boolean flag = false;
            Set<Integer> set = null;
            for (int j = 0; j < res.size(); j++) {
                set = res.get(j);
                if (set.contains(i)){
                    //如果集合中包含当前机器编号,标识该机器没有联通,则跳出循环
                    flag = true;
                    break;
                }
            }

            if (!flag){
                //将该机器的编号加入集合中
                set = new HashSet<>();
                set.add(i);
                res.add(set);
            }
            for (int j = 0; j < num; j++) {
                if (list.get(i).get(j)==1){
                    //将该机器可联通的机器编号加入集合中
                    set.add(j);
                }
            }
        }
        System.out.println(res.size());
    }

}

还没有评论,来说两句吧