C++实现AOE网中的关键路径算法及机动时间计算算法(邻接表存储)

代码如下:

#include <iostream>
#include <stack>
using namespace std;
const int N = 100;typedef struct Node
{int adj;int w;Node *next;}Node;typedef struct VNode
{int in;int v;Node *first;VNode(){first = nullptr;}
}VNode;class AOE
{
private:VNode adjList[N];int vn;int en;int tpord[N];int ve[N];int vl[N];bool coll[N];int path[N];bool vis[N];
public:AOE(){memset(ve, 0, sizeof(ve));memset(vl, 0, sizeof(vl));}void buildAOE(){int n, m;cin >> n >> m;vn = n;en = m;for (int i = 0; i < vn; i++){cin>>adjList[i].v;}for (int i = 0; i < en; i++){int x, y, w;cin >> x >> y >> w;Node *s = new Node;s->adj = y;s->w = w;s->next = adjList[x].first;adjList[x].first = s;}}void findIn(){for (int i = 0; i < vn; i++){adjList[i].in = 0;}for (int i = 0; i < vn; i++){for (Node *p = adjList[i].first; p; p = p->next){adjList[p->adj].in++;}}}bool toptpord(){stack<int>s;findIn();for (int i = 0; i < vn; i++){if (adjList[i].in == 0){s.push(i);}}int n = vn;int cnt = 0;while (!s.empty()){int xx = s.top();s.pop();tpord[cnt++] = xx;n--;for (Node *p = adjList[xx].first; p; p = p->next){int yy = p->adj;adjList[yy].in--;if (adjList[yy].in == 0){s.push(yy);}if (ve[xx] + p->w > ve[yy]){ve[yy] = ve[xx] + p->w;}}}if (!n){return true;}else{return false;}}bool criticPath(){if (!toptpord()) return false;for (int i = 0; i < vn; i++){vl[i] = ve[vn - 1];}for (int i = vn - 1; i >= 0; i--){int xx = tpord[i];for (Node *p = adjList[xx].first; p; p = p->next){int yy = p->adj;if (vl[yy] - p->w < vl[xx]){vl[xx] = vl[yy] - p->w;}}int e = 0;int l = 0;for (int i = 0; i < vn; i++) coll[i] = false;for (int i = 0; i < vn; i++){for (Node *p = adjList[i].first; p; p = p->next){int k = p->adj;e = ve[i];l = vl[k] - p->w;if (e == l){coll[i] = coll[k] = true;}}}}return true;}void freeTime()//求机动时间{for (int i = 0; i < vn; i++){int xx = i;for (Node *p = adjList[i].first; p; p = p->next){int yy = p->adj;if (vl[yy] - ve[xx] - p->w > 0){cout << "yy = "<<yy<<" vl[yy] = " << vl[yy] <<" xx = "<<xx<< " ve[xx] = " << ve[xx] << " p->w = " << p->w << endl;cout << xx << " " << yy <<" "<< vl[yy] - ve[xx] - p->w<< endl;}}}cout << endl;}void dfs(int v, int cnt, int ans){path[cnt++] = v;if (v == vn - 1){cout << "value = " << ans << endl;for (int i = 0; i < cnt; i++){cout << path[i] << " ";}cout << endl;return;}for (Node *p = adjList[v].first; p; p = p->next){int k = p->adj;if (!vis[k] && coll[k]){vis[k] = true;dfs(k, cnt, ans + p->w);vis[k] = false;}}}void printPath(){for (int i = 0; i < vn; i++) vis[i] = false;vis[0] = true;dfs(0, 0, 0);}};int main()
{AOE g;g.buildAOE();g.criticPath();g.printPath();g.freeTime();return 0;
}

测试如下:

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用对偶表示重新实现Stack(lua程序设计21.7练习21.3题)

使用对偶表示重新实现Stack&#xff08;lua程序设计21.7练习21.3题&#xff09; local data {} DualStack {} function DualStack:new(o)o o or {}self.__index selfsetmetatable(o,self)data[o] {}return o end function DualStack:push(v)table.insert(data[self],v) en…

.NET 开源项目 StreamJsonRpc 介绍[中篇]

阅读本文大概需要 11 分钟。上一篇介绍了一些预备知识&#xff0c;包括 JSON-RPC 介绍和实现了 JSON-RPC 的 StreamJsonRpc 介绍&#xff0c;讲到了 StreamJsonRpc 可以通过 .NET 的 Stream 类和 WebSocket 类实现 JSON-RPC 协议的通信。本篇就先选择其中的 Stream 类来讲解&am…

用空代理实现account(lua程序设计21.7练习21.4题)

用空代理实现account&#xff08;lua程序设计21.7练习21.4题&#xff09; function createAccount()local proxy {}local mt {balance 0}mt.withdraw function(v) mt.balance mt.balance - v endmt.deposit function(v) mt.balance mt.balance v endmt.getBalance fu…

Istio 中的多集群部署与管理

本文节选自ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》&#xff0c;作者钟华&#xff0c;来自腾讯云。Istio 在 1.1 后提供了两类多集群的连通的部署模式&#xff1a;1. 多控制面2. 单控制面&#xff0c;也称为 “共享控制面” 模式多控制…

lua URL解码

lua URL解码 local function unescape(s)s string.gsub(s,""," ")s string.gsub(s,"%%(%x%x)",function(h)return string.char(tonumber(h,16))end)return s endlocal cgi {} local function decode(s)for name,value in string.gmatch(s,&q…

认证授权方案之授权初识

1.前言回顾&#xff1a;认证授权方案之JwtBearer认证在上一篇中&#xff0c;我们通过JwtBearer的方式认证&#xff0c;了解在认证时&#xff0c;都是基于Claim的&#xff0c;因此我们可以通过用户令牌获取到用户的Claims&#xff0c;在授权过程中对这些Claims进行验证&#xff…

[数据结构]树、森林与二叉树之间的相互转换方法

树、二叉树与森林的相互转换 本文只给出树、森林与二叉树之间的转换方法&#xff0c;而详细的证明过程不在本文讨论范围之内。 树 → 二叉树 在所有兄弟结点之间加一连线。 对每个结点&#xff0c;除了保留与其长子的连线外&#xff0c;去掉该结点与其它孩子的连线。 二叉树 …

lua split实现(lua程序设计10.6练习10.1题)

lua split实现&#xff08;lua程序设计10.6练习10.1题&#xff09; local function split(s,sp)local t {}local last 1local irepeati string.find(s,sp,last,true)if i thenif i ~ last thent[#t1] string.sub(s,last,i-1)endlast i1elseif last < #s thent[#t1] s…

Blazor.Server以正确的方式集成Ids4

&#xff08;一个真正的以后端形式来集成认证中心的方案&#xff09;❤本文导读首先特别感谢张善友老师提供技术指导&#xff0c;源于上周我发了一篇文章《[Mvp.Blazor] 集成Ids4&#xff0c;实现统一授权认证》&#xff0c;我本来是想通过像vue框架那样&#xff0c;通过引oidc…

lua transliterate实现(lua程序设计10.6练习10.3题)

lua transliterate实现&#xff08;lua程序设计10.6练习10.3题&#xff09; local function transliterate(s,t)return (string.gsub(s,"%a",function(a)if t[a] false thenreturn ""elseif t[a] thenreturn t[a]endend)) endlocal s "hello world…

作为一个有理想的程序员,必读的书都有哪些?

很多程序员朋友问我&#xff1a;“哪本最具影响力的书&#xff0c;是每个程序员都应该读的&#xff1f;” 笔者从事软件开发15年&#xff0c;看过的计算机相关的书籍不下百本了&#xff0c;如果非要推荐的话&#xff0c;给大家精选以下10本&#xff0c;希望对大家有所帮助&…

认证授权方案之JwtBearer认证

1.前言回顾&#xff1a;认证方案之初步认识JWT在现代Web应用程序中&#xff0c;即分为前端与后端两大部分。当前前后端的趋势日益剧增&#xff0c;前端设备&#xff08;手机、平板、电脑、及其他设备&#xff09;层出不穷。因此&#xff0c;为了方便满足前端设备与后端进行通讯…

使用过滤器模式,让客户关怀中的代码更加干净整洁

一&#xff1a;实际场景介绍我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自哪个地区&#xff0c;已购买过某个商品&#xff0…

C++实现各种排序以及复杂度,稳定性分析

代码如下: #include<iostream> using namespace std;void Bubble_Sort(int *a, int n) {bool flag;int tmp 0;for (int i n - 1; i > 0; i--){flag false;for (int j 0; j < i; j){if (a[j] > a[j 1]){swap(a[j], a[j 1]);flag true;}}if (!flag) break…

Webapi管理和性能测试工具WebBenchmark

WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具&#xff0c;在传统工具中一般管理工具缺乏性能压测能力或有性能压测的缺少管理功能&#xff1b;WebBenchmark的设计目标是就管理和性能测试能力同时具备。接下来介绍一下工具的功能和使用&#xff1a…

Abstract Factory(抽象工厂)--对象创建模式

Abstract Factory &#xff08;抽象工厂&#xff09;–对象创建模式 一、意图 提供一个创建一系列相关或者相互依赖的接口&#xff0c;而无需指定它们具体的类。 二、动机 1.在软件系统中&#xff0c;经常面临着“一系列相互依赖的对象”的创建工 作;同时&#xff0c;由于需求…

数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型的概念

数据&#xff1a; 是客观事物的符号表示&#xff0c;指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数&#xff0c;文本编辑所用到的字符串&#xff0c;多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素&a…