OD C卷 - 查找一个有向网络的头节点和尾节点

news2024/11/27 14:48:31

查找一个有向网络的头节点和尾节点 (200)

  • 在一个有向图中,有向边用两个整数表示,第一个整数表示起始节点,第二个整数表示终止节点;
  • 图中只有一个头节点,一个或者多个尾节点;
  • 图可能存在环,有环则输出-1;
  • 输出图中的头节点(入度为0)、尾节点(出度为0),如图头节点为1,尾节点为4。
    在这里插入图片描述
    输入描述:
    第一行输入n,n >=0
    第二行为n个数对,表示n条边;
    输出描述:
    输出一行,头节点、尾节点以空格隔开,多个尾节点则从大到小输出。
     
    示例1
    输入:
    4
    1 2 1 3 2 4 3 4
    输出:
    1 4
     
    示例2
    输入:
    3
    1 2 1 3 1 4
    输出:
    1 4 3 2
     
    示例3
    输入:
    4
    1 2 2 3 3 4 4 1
    输出:
    -1
     
    示例4
    输入:
    5
    1 2 2 3 3 4 4 5 4 2
    输出:
    -1
    思路:
  • 拓扑排序,判断有向图是否有环,有环则直接输出-1;
  • 只有一个起始点,一个或多个结尾点;
# __author__ = "laufing"


class GraphHeadTail:
    def solution(self, n, edges):
        # 所有的顶点和数目
        vertex = list(set(edges))
        vertex_num = len(vertex)
        # 统计每个顶点的入度
        in_degree = {}.fromkeys(vertex, 0)
        # 每个顶点的出度
        out_degree = {}.fromkeys(vertex, 0)
        for i in range(n):
            u, v = edges[i*2:(i+1)*2]
            out_degree[u] += 1
            in_degree[v] += 1

        # 找到入度为零的一个节点
        start_node = None
        for key in in_degree:
            if in_degree.get(key) == 0:
                start_node = key
                break

        if self.topology_sort(in_degree, start_node, edges, vertex_num):
            print(-1)
            return -1

        # 无环  输出头节点 + 尾节点
        # 找到所有的尾节点
        tails = []
        for key in out_degree:
            if out_degree.get(key) == 0:
                tails.append(key)
        tails.sort(reverse=True)
        result = str(start_node) + " " + " ".join(list(map(str, tails)))
        print(result)
        return result

    def topology_sort(self, in_degree, start_node, edges, vertex_num):
        in_degree = in_degree.copy() # 不影响原始数据
        if start_node is None:
            return True
        stack = []
        output_list = []
        stack.append(start_node)

        while stack:
            nodev = stack.pop()
            print("nodev:", nodev)
            output_list.append(nodev)
            # 删除边,对应的顶点入度-1
            for i in range(len(edges) // 2):
                u, v = edges[i*2:(i+1)*2]
                if u == nodev:
                    in_degree[v] -= 1
                    if in_degree[v] == 0:
                        stack.append(v)
        print(output_list)
        return len(output_list) < vertex_num


if __name__ == '__main__':
    graph_head_tail = GraphHeadTail()
    while True:
        try:
            n = int(input("n:").strip())
            edges = list(map(int, input("edges:").strip().split()))
            graph_head_tail.solution(n, edges)
        except KeyboardInterrupt:
            break

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统信息排查

目录 介绍步骤 介绍 1、熟悉查看CPU信息、操作系统信息、用户信息、特殊权限账户、启动项和任务计划的排查命令 2、在进行受害主机排查时&#xff0c;首先要对主机系统进行基本排查&#xff0c;方便对受害主机有一个初步的了解。 3、利用lscpu和uname -a查看系统硬件软件基本…

JavaScript(28)——正则表达式

定义正则表达式语法&#xff1a; const 变量名 /表达式/ 判断是否有符合规则的字符串&#xff1a; test()方法 用来查看正则表达式与指定的字符串是否匹配 语法&#xff1a; regObj.test(被检测的字符串) //返回布尔值 regObj.exec(字符串) //返回的是数组 <script>…

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结 一、环境信息二、安装部署三、向导 介绍如何基于Docker、Docker Compose的方式安装部署Confluence 8.3.4&#xff0c;并且设置数据的持久化存储。 一、环境信息 操作系统&#xff1a;CentOS 7.9 Docker Ver…

C++之多态(下)

目录 多态的实现原理 多态的拓展 单继承中的多态 多继承中的多态 上期&#xff0c;我们学习了多态的基本概念&#xff0c;本期我们来学习多态的实现原理。 多态的实现原理 class Base { public:virtual void func1(){cout << "Base::func1()" <<…

CUTLASS 中的 47_ampere_gemm_universal_streamk 示例

前一篇文章介绍了 Stream-K: Work-centric Parallel Decomposition for Dense Matrix-Matrix Multiplication on the GPU 论文&#xff0c;下面对其代码实现进行分析。 cutlass 的 examples/47_ampere_gemm_universal_streamk 展示了 GEMM Stream-K 算法在 Ampere 架构上的使用…

健身房管理系统--论文pf

TOC springboot542健身房管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持&#xff0c;带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础&#xff0c;打造的全新沉浸文化项目“国宝数字体验展“&#xff0c;借由文物的视角、站在历史的星河中&#xff0c;探寻时间长河中不变的智慧…

设计模式笔记02(java版)

文章目录 创建者模式单例设计模式 ★单例模式的结构单例模式的实现饿汉式-方式1&#xff08;静态变量方式&#xff09;饿汉式-方式2&#xff08;静态代码块方式&#xff09;懒汉式-方式1&#xff08;线程不安全&#xff09;懒汉式-方式2&#xff08;线程安全&#xff09;懒汉式…

Linux环境安装 JDK

目录 JDK准备 1&#xff09;卸载现有JDK&#xff08;3台节点&#xff09; 2&#xff09;用Xftp工具将JDK导入到hadoop12的/opt/software文件夹下面 3&#xff09;在Linux系统下的opt目录中查看软件包是否导入成功 4&#xff09;解压JDK到/opt/module目录下 5&#xff09;配…

数据恢复新宠儿:2024年新兴软件趋势与亮点解析

你的手机、优盘、电脑里是不是都存储这你生活的点点滴滴&#xff1f;不知道你有没有遇到过数据误删或者消失的情况。如果有数据恢复精灵能帮你找回数据是不是为你的数据找回点亮了方向。这次我就介绍几款数据恢复工具带你走出数据丢失的困境。 1.福昕数据恢复 链接直达&#…

告别 Coding 噩梦-掌握这10个习惯,成为大数据开发高手

你是否曾在半夜被一个顽固的bug折磨得睡不着觉?是否因为理解不了复杂算法而感到沮丧?别担心,你并不孤单。作为一名经验丰富的大数据开发者,我深知编程之路上的挫折感。但今天,我要和你分享我是如何在这条充满荆棘的道路上找到突破,最终成长为一名得心应手的编程高手的。 前…

达梦数据库的系统视图v$tablespace

达梦数据库的系统视图v$tablespace 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$TABLESPACE 提供了有关数据库中的表空间&#xff08;Tablespace&#xff09;信息。这些信息对于管理数据库存储和优化性能非常关键。表空间是数据库逻辑存储结构的一个层次…

基于Java的小区物业管理系统设计与实现

TOC springboot596基于Java的小区物业管理系统设计与实现--论文 研究背景 小区物业管理系统主要通过计算机网络&#xff0c;对小区物业管理系统所需的信息进行统一管理&#xff0c;方便用户随时随地进行增添、修改、查询、删除各类信息。本系统极大的促进了系统与数据库管理…

Python编码系列—前端后浪:Python前后端分离开发实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

我“开发“了一款大模型应用,AI门槛这么低了吗?

现在国产大模型多如牛毛。虽然可选的大模型产品很多&#xff0c;但普遍存在同质化、高分低能、实用性差、专业性不足的问题&#xff0c;哪怕是诸如ChatGPT、Gemini这样全球顶尖的大模型也会存在这种情况。 还有一点比较重要的是&#xff0c;由于大模型需要算力、算法、数据的基…

干货:2024年四大翻译工具新体验!

在全球化的今天&#xff0c;语言的障碍似乎越来越小&#xff0c;这得益于各种翻译工具的飞速发展。从简单的在线翻译到复杂的AI翻译技术&#xff0c;我们有了更多的选择来跨越语言的鸿沟。以下是几款备受推崇的翻译工具&#xff0c;推荐给大家 福昕在线翻译 链接&#xff1a;…

onlyoffice连接器(connector)开发使用精讲 二次开发 深入开发【一】

连接器是onlyoffice调用web api的一个基础工具&#xff0c;可以方便开发者或者用户与业务系统结合使用web功能。 关于connector官方说明文档在这里&#xff1a;Automation API - ONLYOFFICE Api Documentation 注意&#xff1a;该功能针对开发者版、企业版&#xff0c;社区版常…

高考杂志社《高考》杂志社高考杂志社编辑部2024年第22期目录

高考论坛 高考内容改革背景下的高中数学教学策略探究 高琳琳; 3-5 新高考背景下高中数学教学中核心素养的培养路径 王芳芳; 6-8 教改研究 任务型教学在高中语文大单元教学中的应用 蔡莎; 9-11 大单元教学在高中思想政治教学中的应用探究 陈玲; 12-14 高中语文班…

局部整体(三)利用python绘制饼图

局部整体&#xff08;三&#xff09;利用python绘制饼图 饼图&#xff08; Pie Plot&#xff09;简介 饼图是一个将整体划分为几个扇形的圆形统计图表&#xff0c;用于描述数量、频率或百分比之间的相对关系。饼形图适合用来快速展示数据比例分布&#xff0c;但不利于展示较多…

华为手机相册的照片丢失或误删怎么恢复?

手机已经成为了生活中极其重要的一部分&#xff0c;尤其是华为手机用户&#xff0c;一定深知其出色的拍照功能和丰富的相册管理功能。然而&#xff0c;常有意外出现&#xff0c;如误删除、格式化、备份覆盖等情况导致手机相册的照片丢失&#xff0c;那么华为手机相册的照片怎么…