19017 编译依赖问题(拓扑排序)

news2024/9/23 12:28:02

这个问题可以通过拓扑排序来解决。拓扑排序是一种对有向无环图(DAG)进行排序的算法,它会按照依赖关系生成一个线性序列。在这个问题中,我们可以将文件的依赖关系看作是一个有向无环图,然后使用拓扑排序来生成编译顺序。  以下是C++代码实现:

#include <iostream>
#include <vector>
#include <queue>
#include <sstream>
using namespace std;

string compileOrder(string dependencies) {
    stringstream ss(dependencies);
    vector<int> indegree(100, 0);
    vector<vector<int>> graph(100);
    string item;
    int idx = 0;
    while (getline(ss, item, ',')) {
        int dep = stoi(item);
        if (dep != -1) {
            graph[dep].push_back(idx);
            indegree[idx]++;
        }
        idx++;
    }

    priority_queue<int, vector<int>, greater<int>> q;
    for (int i = 0; i < idx; i++) {
        if (indegree[i] == 0) {
            q.push(i);
        }
    }

    string res;
    while (!q.empty()) {
        int cur = q.top();
        q.pop();
        res += to_string(cur) + ",";
        for (int next : graph[cur]) {
            indegree[next]--;
            if (indegree[next] == 0) {
                q.push(next);
            }
        }
    }

    res.pop_back();  // remove the last comma
    return res;
}

int main() {
    string dependencies;
    cin >> dependencies;
    cout << compileOrder(dependencies) << endl;
    return 0;
}

在这段代码中,我们首先读取输入的依赖关系,然后我们构建一个有向图和一个入度数组。然后我们将入度为0的节点加入到一个优先队列中。然后我们从优先队列中取出一个节点,将它加入到结果中,然后将它的所有后继节点的入度减1,如果后继节点的入度变为0,那么我们将后继节点加入到优先队列中。我们重复这个过程,直到优先队列为空。最后,我们输出结果,这就是我们要找的编译顺序。  这段代码的时间复杂度是O(n log n),其中n是节点的数量。因为我们需要将所有节点加入到优先队列中,这个操作的时间复杂度是O(log n)。然后我们需要遍历所有节点,这个操作的时间复杂度是O(n)。所以总的时间复杂度是O(n log n)。  这段代码的空间复杂度是O(n),因为我们需要存储输入的有向图和入度数组。

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

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

相关文章

先进的硬件设备将人工智能能耗降低1000倍

明尼苏达大学双城分校的工程研究人员开发出一种先进的硬件设备&#xff0c;可将人工智能&#xff08;AI&#xff09;计算应用中的能耗至少降低 1000 倍。这项研究发表在《自然》杂志出版的同行评审科学杂志《npj 非常规计算》上。研究人员拥有该设备所用技术的多项专利。 随着…

实时数仓Hologres TPC-H及点查性能开箱测试

实时数仓Hologres是阿里云自研一站式实时数仓引擎&#xff0c;提供统一、实时、弹性、易用的一站式实时数仓引擎&#xff0c;分析性能打破TPC-H世界记录&#xff0c;一份数据可同时支持多维分析&#xff08;OLAP&#xff09;、即席分析&#xff08;Ad Hoc&#xff09;、点查&am…

昇思25天学习打卡营第XX天|10-使用静态图加速

MindSpore设计的AI编译框架提供了动态图和静态图两种运行模式&#xff0c;用户可根据需求在这两种模式间手动切换&#xff0c;以平衡开发效率与运行性能。 动态图模式&#xff08;PyNative&#xff09;允许模型构建与计算同步进行&#xff0c;便于调试&#xff0c;但优化受限。…

2-51 基于matlab的IFP_FCM(Improved fuzzy partitions-FCM)

基于matlab的IFP_FCM&#xff08;Improved fuzzy partitions-FCM&#xff09;&#xff0c;改进型FCM(模糊C均值)聚类算法,解决了FCM算法对初始值设定较为敏感、训练速度慢、在迭代时容易陷入局部极小的问题。并附带了Box和Jenkins煤气炉数据模型辨识实例。程序已调通&#xff0…

理解 Unix/Linux 中的 Terminal、Shell、TTY 和 Console

文章目录 1 Terminal1.1 传统意义上的 Terminal1.2 现代的 Terminal 2 TTY2.1 TTY 的起源2.2 Linux 中的 TTY2.3 虚拟终端2.3.1 虚拟终端为什么是虚拟的&#xff1f; 2.4 伪终端2.4.1 伪终端的组成2.4.2 伪终端的工作原理2.4.3 伪终端的应用 3 Console3.1 Console 的定义3.2 Li…

7.31日学习打卡---Spring Cloud Alibaba(一)

7.31日学习打卡 目录&#xff1a; 7.31日学习打卡一.架构的演变单体应用阶段垂直应用阶段分布式系统阶段微服务阶段 二. Spring Cloud Alibaba什么是Spring Cloud Alibaba分布式配置中心_搭建微服务项目环境为什么需要服务治理分布式配置中心_Nacos四大功能Windows 搭建部署Nac…

基于SSM框架的学生考勤管理系统设计与实现源码+lw+部署文档+讲解等)

文章目录&#xff1a; 目录 详细视频演示 系统实现界面 .2管理员功能模块实现 5.3学生功能模块实现 技术栈查看 2.1 人脸识别技术的概念 2.2 Java介绍 2.3 MySql数据库 2.4 Tomcat简介 2.5 B/S架构 2.6 SSM框架 系统整体设计 系统测试的目的 6.2软件测试过程 6.…

C语言典型例题14

//《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习题2.2 中国在2020年11月1日进行第7次全国人口普查&#xff0c;全国人口为1411778724人&#xff0c;假设年增长率为0.5%&#xff0c;计算到2050年有多少人口&#xff1f; //《C程序设计教程&#xff08;第四版…

[玄机]流量特征分析-蚁剑流量分析

题目网址【玄机】&#xff1a;https://xj.edisec.net/ AntSword&#xff08;蚁剑&#xff09;是一款开源的网络安全工具&#xff0c;常用于网络渗透测试和攻击。它可以远程连接并控制被攻击计算机&#xff0c;执行命令、上传下载文件等操作。 蚁剑与网站进行数据交互的过程中&a…

iOS开发-图片上涂鸦绘制撤销功能

iOS开发-图片上涂鸦绘制撤销功能 当我们需要重新在图片上进行绘制涂鸦生成新的图&#xff0c;这里使用到了Graphics中的API功能。 Graphics Framework是一套基于C的API框架&#xff0c;使用了Quartz作为绘图引擎。它提供了低级别、轻量级、高保真度的2D渲染。 微信搜索小游戏…

wps在pc端在线预览,而不是下载

如果有有java后端代码如下 SneakyThrowsApiOperation("访问文件")GetMapping("/download/{name}")public void getImage(HttpServletResponse response, PathVariable("name") String name) {String imagePath uploadFilePath File.separator …

文件上传漏洞--之upload-labs靶场第 11-15关(后三关需要制作图片马)持续更新ing...

第11关 第一步&#xff1a;查看源码 这是一个白名单&#xff0c;里面限制了只可以提供它所规定文件jpg&#xff0c;png,gif。 这段 PHP 代码主要实现了文件上传的功能&#xff0c;并进行了一些条件判断和处理&#xff1a; 首先&#xff0c;定义了两个变量 $is_upload 并初始…

GitHub Pages上用vue搭建个人网站简记

新建仓库 将仓库取名为:<你的用户名>.github.io 就像这样 GitHub会帮你自动部署在 https://jerryqjr.github.io/ 上 npm run build后把disk传入新的分支 git subtree push --prefix dist origin gh-pages将子目录 dist 的内容推送到远程分支 gh-pages 随后在 Settin…

综合点评!史上最强开源大模型Llama 3.1

在人工智能领域&#xff0c;开源模型一直是推动技术进步和创新的重要力量。 北美时间7月23日&#xff0c;Meta公司&#xff08;原Facebook&#xff09;宣布了一项重大突破&#xff1a;开源模型Llama 3.1的正式发布。这一举措预示着AI技术的又一次飞跃&#xff0c;Llama 3.1有望…

java~反射

反射 使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09; 原理图 加载完类后&#xff0c;在堆中就产生了一个Class类型的对象&#xff08;一个类只有一个Class对象&#xff09;&#xff0c;这个对…

IOday4

一、思维导图 二、练习 1、使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;子进程结束后退出&#xff0c;父进程回收子进程的资源 #include<myhead.h> int main(int argc, const char *argv[]) {//判断终…

分享:Vue3中如何使用echarts工具开发可视化图表

官方链接 点此进入 导入 import * as echarts from echarts 页面 <div id vdrBarChart style"height: 300px;width: 500px;"></div> 调用 //DOM 更新完成后&#xff0c;延时100ms执行setBarChart方法this.$nextTick(() > {setTimeout(() >…

电路设计-基础2-电阻电容

电路设计-基础2-电阻电容 分立元件常见的分立元件及其功能分立元件的特点 电阻**注意**电阻种类1. 直插电阻&#xff08;色环电阻&#xff09;2. 贴片电阻&#xff08;SMD电阻&#xff09;3. 电位器&#xff08;可变电阻器,滑动变阻器&#xff09;4. 热敏电阻&#xff08;NTC/P…

如何解决部分设备分辨率不适配

1&#xff09;如何解决部分设备分辨率不适配 2&#xff09;Unity中如何实现草的LOD 3&#xff09;使用了Play Asset Delivery提交版本被Google报错 4&#xff09;如何计算弧线弹道的落地位置 这是第396篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;…

运筹说 第120期 | 确定型存储模型

上一期我们一起学习了存储问题及其基本概念&#xff0c;本期小编将带大家学习确定型存储模型的相关内容。 下面我们一起来学习确定型存储模型的五个基础模型吧&#xff01; 模型一&#xff1a;不允许缺货&#xff0c;补充时间极短 为了便于描述和分析&#xff0c;对模型作如下…