代码随想录训练营Day 72|拓扑排序精讲、dijkstra(朴素版)精讲

1.拓扑排序精讲

代码随想录

题目:117. 软件构建

 代码:

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
using namespace std;
int main(){// 输入int n,m,s,t;cin >> n >> m;unordered_map<int,vector<int>> umap; // 记录文件间的依赖关系vector<int> indegree(n,0);vector<int> result;while(m--){cin >> s >> t;indegree[t]++;umap[s].push_back(t);}// 处理queue<int> que;for(int i = 0; i < n; i++){if(indegree[i] == 0) que.push(i);}while(que.size()){int cur = que.front();que.pop();result.push_back(cur);vector<int> files = umap[cur];if(files.size()){for(int i = 0; i < files.size(); i++){indegree[files[i]]--;if(indegree[files[i]] == 0) que.push(files[i]);}}}// 输出if(result.size() == n){for(int i = 0; i < n - 1; i++){cout << result[i] << " ";}cout << result[n - 1];}else{cout << -1 << endl;}
}

思路:

每一次把入度为0的结点加入对列,选择对列头部的结点进行操作,保存该节点值到结果里,后弹出该节点,然后根据对列里的结点的依赖关系,找到此节点指向的结点,将这些结点的入度减1,同时如果发现有结点入度为0就加入对列。 

其实思路还是简单的,代码的话,就是用来一个数组来记录各个结点的入度,根据对列的操作动态更新;用一个unordered_map来记录结点间的依赖关系,在进行入队出队操作时,我们是根据这个依赖关系来找哪些结点的入度应该进行删减的。

2.dijkstra(朴素版)精讲

 代码随想录

题目:47. 参加科学大会(第六期模拟笔试) (kamacoder.com)

代码: 

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main(){int n,m,p1,p2,val;cin >> n >> m;vector<vector<int>> grid(n + 1,vector<int>(n + 1,INT_MAX));for(int i = 0; i < m; i++){cin >> p1 >> p2 >> val;grid[p1][p2] = val;}int start = 1;int end = n;// 记录源点到每个节点的最短距离vector<int> minDist(n + 1,INT_MAX);vector<bool> visited(n + 1,false);minDist[start] = 0;for(int i = 1; i <= n; i++){ // 遍历所有结点int minVal = INT_MAX;int cur = 1;// 1.选择距离源点最近且未访问的结点for(int v = 1; v <= n; v++){if(!visited[v] && minDist[v] < minVal){minVal = minDist[v];cur = v;}}// 2.标记该结点已访问visited[cur] = true;// 3.更新非访问结点到源点的距离(即minDist数组)for(int v = 1; v <= n ; v++){if(!visited[v] && grid[cur][v] != INT_MAX && minDist[cur] + grid[cur][v] < minDist[v]){minDist[v] = minDist[cur] + grid[cur][v];}}}if(minDist[end] == INT_MAX) cout << -1 << endl; // 不能抵达终点else cout << minDist[end] << endl;
}

思路:其实就是贪心算法,从起点出发,去找和该结点直接相联的结点,加入到以访问的集合中,每次都从这个集合出发,扩大该集合,同时在扩大到过程中,选取距离起点最短的距离更新到minDist数组里。这样我们将全部的结点访问过一次后,就可以找到终点距离起点的最短距离了。

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

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

相关文章

AI Earth——MuSyQ 30m/10天叶片叶绿素含量产品(中国)应用 app

应用介绍 ​​​​​​​30m/10天合成的叶片叶绿素含量产品是空天院多源协同定量遥感产品生产系统((Multi-source data Synergized Quantitative remote sensing production system,MuSyQ))产品之一。 叶片叶绿素含量(Chlleaf)是植被遥感监测中最重要的参数之一,目前国…

记录我使用poi库,中文却无法显示的问题

目录 前言&#xff1a; 正片&#xff1a; 修改word的编码格式 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 第五步&#xff1a; 修改idea编码格式 前言&#xff1a; &#x1f388;&#x1f388;&#x1f388;这是昨天晚上Blue遇到的…

WooCommerce网站加速指南:入门级方法

在如今快节奏的网络时代&#xff0c;网站加载速度直接影响用户体验和销售转化率。对于WooCommerce网站来说&#xff0c;这一点尤为重要。那么&#xff0c;如何让你的网站跑得更快呢&#xff1f;下面&#xff0c;我将分享一些入门级的方法&#xff0c;帮助你显著提升WooCommerce…

mmc-utils 的 MMC 测试工具

MMC 工具介绍 有一个名为 mmc-utils 的 MMC 测试工具&#xff0c;由 Ulf Hansson 维护&#xff0c;您可以在以下公共 git 存储库中找到它&#xff1a; mmc/mmc-utils.git - Unnamed repository; edit this file description to name the repository. 功能 mmc-utils 工具可以…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区&#xff08;一&#xff09;&#xff1a;程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

物联网平台定义和架构

物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务等能力的一体化平台。它支持海量设备的连接&#xff0c;采集设备数据上云&#xff0c;同时提供云端API&#xff0c;使服务端可以通过云端SDK调用云端API将指令下发至设备端&#xff0c;实…

手机和电脑通过TCP传输(一)

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…

【云原生网络CNI】容器网络接口CNI的使用和管理

云原生网络CNI 容器网络接口CNI的使用和管理 1. CNI简介 什么是CNI 容器网络接口&#xff08;CNI, Container Network Interface&#xff09;是一个为容器提供网络连接的标准。它定义了一组规范&#xff0c;描述了容器如何通过插件与不同的网络实现进行交互。CNI的目标是简…

【DevOps文化与实践】DevOps的基本原则和实施策略

DevOps文化与实践 DevOps的基本原则和实施策略 大纲 DevOps简介 什么是DevOpsDevOps的起源和发展 DevOps的基本原则 文化与协作持续集成与持续交付基础设施即代码自动化测试监控与反馈 实施DevOps的策略 文化转变工具选择与整合持续集成/持续交付流水线自动化和基础设施管理…

大气热力学(10)——条件性不稳定

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 10.1 为什么需要关注条件性不稳定&#xff1f;10.2 不稳定能量10…

使用自制Qt工具配合mitmproxy进行网络调试

在软件开发和网络调试过程中&#xff0c;抓包工具是不可或缺的。传统的抓包工具如Fiddler或Charles Proxy通常需要设置系统代理&#xff0c;这会抓到其他应用程序的网络连接&#xff0c;需要设置繁琐的过滤&#xff0c;导致不必要的干扰。为了解决这个问题&#xff0c;我们可以…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

Java 日期时间

Java 提供了丰富的日期时间处理功能&#xff0c;主要集中在 java.time 包下。java.time 包是从 Java 8 开始引入的&#xff0c;设计用于解决旧的 java.util.Date 和 java.util.Calendar 类存在的问题&#xff0c;提供了更加清晰、易用和线程安全的 API。 ### 主要类和接口 1.…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

一文读懂Java并发编程基础知识

什么是并发&#xff1f; 并发是指在某个时间段内&#xff0c;多任务交替处理的能力。比如说&#xff0c;你有一台单核心CPU电脑&#xff0c;注意必须是以单核心来理解下面的例子才是正确的。你可以利用电脑边听音乐&#xff0c;边写PPT&#xff0c;还能随时斗上一盘地主。这些…

基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127

基于SpringBootVue的实现的实验室管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 实验室管理系统 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;公告信息管理&#xff0c;知识库管理…