首页 > 编程语言 >常见面试算法题-发广播

常见面试算法题-发广播

时间:2024-04-05 17:31:23浏览次数:27  
标签:matrix res 广播 len dic 站点 面试 算法 连接

■ 题目描述

  • 某地有N个广播站,站点之间有些有连接,有些没有。有连接的站点在接受到广播后会互相发送。
  • 给定一个N*N的二维数组matrix,数组的元素都是字符’0’或者’1’。matrix[i][j]=‘1’,则代表i和j站点之间有连接,matrix[i][j] = ‘0’代表没连接,
  • 现在要发一条广播,问初始最少给几个广播站发送,才能保证所有的广播站都收到消息。

输入描述:

  • 从stdin输入,共一行数据,表示二维数组的各行,用逗号分隔行。保证每行字符串所含的字符数一样的。
  • 比如:110,110,001。

输出描述:

  • 返回初始最少需要发送广播站个数。

示例1   

输入

110,110,001

输出

2

说明

站点1和站点2直接有连接,站点3和其他的都没连接,所以开始至少需要给两个站点发送广播。

示例2 

输入

100,010,001

输出

3

说明

3台服务器互不连接,所以需要分别广播这3台服务器。

示例3  

输入

11,11

输出

1

说明

2台服务器相互连接,所以只需要广播其中一台服务器

以下代码为本人原创,可以供大家参考,若有不足之处,感谢指出!!!!

num = list(input().split(','))
matrix = [[]]*len(num)
for i in range(len(num)):
    matrix[i] = list(num[i])
m = len(matrix)
n = len(matrix[0])
res = [0]*m
dic = {}
for i in range(m-1):
    for j in range(i+1, n):
        if matrix[i][j] == '1':
            if i in dic:
                dic[i].append(j)
            elif i not in dic:
                dic[i] = [j]
            if j in dic:
                dic[j].append(i)
            elif j not in dic:
                dic[j] = [i]


def dfs(k):
    res[k] = 1
    if k not in dic:
        return
    else:
        for w in dic[k]:
            if res[w] == 0:
                dfs(w)


total = 0
for i in range(len(res)):
    if res[i] == 0:
        dfs(i)
        total += 1
print(total)

标签:matrix,res,广播,len,dic,站点,面试,算法,连接
From: https://blog.csdn.net/YW2019/article/details/137404606

相关文章

  • 《架构风清扬-Java面试系列第13讲》说一说Java对象在内存中的生命周期
    大家好,加个餐!像线程的生命周期,Servlet的生命周期,相信这类问题大家都非常熟悉了Java对象在内存中的生命周期,这个题目倒是有些新鲜来,思考片刻,说出你的答案(PS:上图缓冲)Java对象在其内存中的生命周期可以被划分为多个阶段,下面钊哥逐个给大家说一说1,创建阶段(Creation......
  • Java中常用的加密算法及其实现原理详解(二)
    本系列文章简介:        随着互联网的快速发展,信息的安全保护愈发重要。在软件开发中,加密算法被广泛应用于数据的加密和解密过程中,以保护敏感信息的机密性和完整性。Java作为一种广泛应用于企业级开发的编程语言,也提供了丰富的加密算法库。        本文将介绍......
  • 文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题
    一、如果栈操作包括MULTIPUSH操作,它将k个数据项压入栈中,那么栈操作的摊还代价的界还是O(1)吗?文心一言:在栈的基本操作中,我们通常考虑的是单个元素的压入(push)和弹出(pop)操作,这些操作的摊还代价通常是O(1)。摊还代价考虑的是一系列操作的平均代价,而不是单个操作的最坏......
  • 代码随想录算法训练营第二十四天 二十五 | 回溯的理论基础,77. 组合 216. 组合总和 II
    77.组合https://leetcode.cn/problems/combinations/description/List<List<Integer>>res=newArrayList<>();List<Integer>path=newArrayList<>();publicList<List<Integer>>combine(intn,intk){......
  • Python企业面试题2 —— 基础篇
    1.re的match和search区别?re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。re.search扫描整个字符串并返回第一个匹配成功的值。2.什么是正则的贪婪匹配?匹配一个字符串没有节制,能匹配多少就去匹配多少,直到没有匹配的为止。......
  • MySQL面试题系列-8
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。mysql的全复制、半复制、异步复......
  • 九、算法-排序-堆排序
    常见六大排序:冒泡、选择、插入、快速、归并、堆。在了解堆排序之前,需要了解数据结构-二叉树的知识。二叉树:树中的每个节点下最多只有两个叶子节点;根节点:二叉树的首个节点;叶子节点:非根的节点;父节点-子节点:父节点下方归属的为子节点,是相对而言的关系,在顺序存储的数据结构里......
  • 分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测
    分类预测|Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测目录分类预测|Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测分类效果基本介绍程序设计参考资料分类效果基本介绍1.Matlab实现CPO-LSSVM冠豪猪算法优化最小支持......
  • 代码随想录算法训练营第二天 | 数组 977.有序数组的平方
    leetcode977.有序数组的平方题目977.有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9......
  • C112 莫队算法 P1494 [国家集训队] 小 Z 的袜子
    视频链接:  LuoguP1494[国家集训队]小Z的袜子//普通莫队O(n*sqrt(n))#include<iostream>#include<cstring>#include<algorithm>#include<cmath>usingnamespacestd;constintN=50005;intn,m,B,a[N];intsum,cnt[N],ans1[N],ans2[N];str......