华为OD机试-快递业务主站点-2022Q4 A卷-Py/Java/JS

快递业务范围有N个站点,A站点与B站点可以中转快递,则认为A-B站可达,如果A-B可达,B-C可达,则A-C达。现在给N个站点编号0、1、...n-1,用s[i][j] 表示i-j是否可达,s[i][j] =1表示i-j可达,s[i][j] =0表示i-j不可达。现用二维数组给定N个站点的可达关系,请计算至少选择从几个主站点出发,才能可达所有站点(覆盖所有站点业)
说明: s[i][j] 与s [j][i] 取值相同
输入描述:
第一行输入为N,N表示站点个数之后N行表示站点之间的可达关系,第i行第i个数值表示编号为i和之间是否可达输出描述:
输出站点个数,表示至少需要多少个主站点
补充说明:
1

示例1
输入:
4
1 1 1 1
1 1 1 0
1 1 1 0
1 0 0 1
输出:

1
说明:
选择0号站点作为主站点,0站点可达其他所有站点,所以至少选择1个站点作为主站才能覆盖所有站点业务。

示例2
输入:

4
1 1 0 0
1 1 0 0
0 0 1 0
0 0 0 1
输出:
3
说明:
选择0号站点可以覆盖0、1站点,选择2号站点可以覆盖2号站点,选择3号站点可以覆盖3号站点,所以至少选择3个站点作为主站才能覆盖所有站点业务。

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
 
class Main {
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
 
        int[][] matrix = new int[N][N];
        for(int i=0; i site_set = new HashSet<>();   
        //需要遍历的次数  
        int res = 0;    
        for(int i=0; i temp = new HashSet<>();  
            temp.add(i);
            check(temp, i, matrix);
            site_set.addAll(temp);  
            res ++;
        }
 
        System.out.println(res);
 
    }
 
    public static void check(Set site_set, int n, int[][] matrix){
 
        for(int i=0; i

Python代码

import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
 
def check(site_set,n,matrix):
    for i  in range(len(matrix)):
        if(i in site_set):    
            continue        
        if(n != i and matrix[n][i] == 1):
            site_set.add(i)
            check(site_set, i,matrix)
 
 
 
#处理输入
N = int(input())
matrix = []
for i in range(N):
    matrix.append([int(x) for x in input().split(" ")])
 
#已经有连通的站点
site_set = set()  
#需要遍历的次数  
res = 0   
for i in range(N):
    #当前站点已经可以达到
    if(i in site_set):
        continue
    temp = set()
    temp.add(i)
    check(temp, i, matrix)
    site_set = set.union(site_set, temp)
    res +=1
 
print(res)

JS代码

class UF {
    constructor(n) {
        this.count = n
        this.item = new Array(n)
        for(let i=0;i

你可能感兴趣的:(java,开发语言,javascript,华为,python)