求AOE图的 拓扑排序 及关键路径长度(java实现)

文章目录

  • 1.AOE图:
  • 2.AOE图邻接链表存储结构:
  • 3.代码实现
    • 3.1.实体及参数初始化
    • 3.2.代码实现
    • 3.3.输出

1.AOE图:

在这里插入图片描述

2.AOE图邻接链表存储结构:

在这里插入图片描述

3.代码实现

3.1.实体及参数初始化

//邻接表的链表节点
@Data
public class LinkedNode {//邻接链表顶点编号private int nodeNum;//头节点到当前链表节点的 弧上的权值private int weight;//当前链表节点指向的下一个链表节点private LinkedNode nextLinkedNode;}
//邻接表中头节点
@Data
public class HeadNode {//节点编号private int nodeNum;//指向的下一个链表节点private LinkedNode nextLinkedNode;}
//AOE网络 图
@Data
public class AoeGraph {//顶点数量private int verticesNum ;//边数量private int edgeNum;//图的邻接表的 头结点集合private  HeadNode[] headNode;}

将AOE图及其邻接链表的关系转化成实体:

    //AOE图的邻接链表的初始化static LinkedNode v0_2 = new LinkedNode(2,30,null);static LinkedNode v0_1 = new LinkedNode(1,10,v0_2);static HeadNode v0 = new HeadNode(0,v0_1);static LinkedNode v1_5 = new LinkedNode(5,50,null);static LinkedNode v1_3 = new LinkedNode(3,30,v1_5);static HeadNode v1 = new HeadNode(1,v1_3);static LinkedNode v2_5 = new LinkedNode(5,20,null);static LinkedNode v2_4 = new LinkedNode(4,30,v2_5);static HeadNode v2 = new HeadNode(2,v2_4);static HeadNode v3= new HeadNode(3,null);static LinkedNode v4_3 = new LinkedNode(3,10,null);static HeadNode v4 = new HeadNode(4,v4_3);static LinkedNode v5_3 = new LinkedNode(3,20,null);static HeadNode v5 = new HeadNode(5,v5_3);//邻接链表的头节点集合static HeadNode[] headNodeArr =  new HeadNode[]{v0,v1,v2,v3,v4,v5};//AOE图static AoeGraph aoeGraph = new AoeGraph(6,8,headNodeArr);

3.2.代码实现

public static void main(String[] args) {int length = criticalPathCalc(aoeGraph);System.out.println("length : "+length);}public static int criticalPathCalc(AoeGraph aoeGraph){int verticesNum = aoeGraph.getVerticesNum();//图的 顶点数量HeadNode[] headNodeArr = aoeGraph.getHeadNode(); //图的邻接表的 头结点集合int [] inDegree = new int[verticesNum]; //记录每个顶点的 实时入度  (初始化后,默认每位都是0)int [] weightSum = new int[verticesNum];//记录从开始顶点到 当前顶点的 实时最大权值 (初始化后,默认每位都是0)ConcurrentLinkedQueue<HeadNode> inDegreeZero = new ConcurrentLinkedQueue<>();//记录入度为0 的顶点 int nodeNum =0 ; //节点的编号//计算每个节点的入度for (int i = 0; i < headNodeArr.length; i++) {HeadNode headNode = headNodeArr[i];//当前操作的邻接邻接链表头节点LinkedNode linkedNode = headNode.getNextLinkedNode();//当前头节点的指向的 邻接节点;while (null!=linkedNode){inDegree[linkedNode.getNodeNum()]++;//指向的 邻接节点的 入度加1linkedNode = linkedNode.getNextLinkedNode();//指针指向 头节点的下一个邻接节点}}//将入度为0 的节点 放入队列for (int i = 0; i < inDegree.length; i++) {if(0==inDegree[i]){inDegreeZero.add(headNodeArr[i]);//将入度为0 的节点放入队列}}//只要队列不为空,就不断弹出入度为0的节点。相当于在图中擦去入度为0的节点及其相关边while (!inDegreeZero.isEmpty()){HeadNode headNode = inDegreeZero.poll();//弹出 入度为0的 节点 作为 =》头节点(相当于擦去入度为0的节点)System.out.println(headNode.getNodeNum());//输出拓扑序列LinkedNode nextLinkedNode = headNode.getNextLinkedNode();//头节点指向的 =》 链表节点while (null!=nextLinkedNode){nodeNum = nextLinkedNode.getNodeNum();//当前头节点指向的 链表节点的 编号inDegree[nodeNum]--;//链表节点入度减1 (相当于擦去入度为0的节点到其指向的链表节点之前的弧)if(0==inDegree[nodeNum]){inDegreeZero.add(headNodeArr[nodeNum]);//如果当前链表节点入度=0,放入队列(准备循环把入度为0的它也擦掉)}//开始节点到当前链表节点的累加权值  <  当前头节点到当前链表节点的弧线权值 + 开始节点到当前头节点的累加权值if(weightSum[nodeNum] < nextLinkedNode.getWeight()+ weightSum[headNode.getNodeNum()]){//开始节点到当前链表节点的最大权值 = 上诉比较的最大值weightSum[nodeNum] = nextLinkedNode.getWeight() + weightSum[headNode.getNodeNum()];}nextLinkedNode = nextLinkedNode.getNextLinkedNode();//获取头节点的下一个链表节点}}return weightSum[nodeNum];//}

3.3.输出

0
1
2
4
5
3
length : 80

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

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

相关文章

陈旸:清华博士的模型信仰

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 陈旸是典型的天才学霸。10岁开始编程&#xff0c;亚洲奖、国奖拿到手软&#xff1b;创业做新媒体&#xff…

创业公司用 Serverless,到底香不香?

来源 | Serverless责编 | 晋兆雨头图 | 付费下载于视觉中国在过去的 5 年里&#xff0c;使用云厂商处理应用后台的流行程度大幅飙升。其一&#xff0c;初创企业主采用 Serverless 方式&#xff0c;以节省基础设施成本&#xff0c;并随用随付。随着公司规模的扩大&#xff0c;依…

Too many files with unapproved license: 2 See RAT report

解决方案 mvn -Prelease-nacos -Dmaven.test.skiptrue -Dpmd.skiptrue -Dcheckstyle.skiptrue -Drat.numUnapprovedLicenses100 clean install -U或者 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.numUnapprovedLicenses100 clean install -U

高速公路智能化转型,阿里云高速云控平台如何赋能?

目前我国高速公路通车里程位居世界第一&#xff0c;但"高速路不高速"却时常发生&#xff0c;每逢出行高峰期&#xff0c;高速公路的拥堵状况会愈发严重。我国高速出行主要面临的痛点是安全和拥堵&#xff0c;主要是由路网利用不均衡、数据价值挖掘不够、协同管理平台…

2021 云原生开门红,金山云发布全新云原生全景图

据云原生计算基金会&#xff08;CNCF&#xff09;数据显示&#xff0c;当前企业已经在广泛使用云原生技术&#xff0c;容器应用已成常态&#xff0c; 2019 年 84&#xff05; 的公司在生产中使用容器&#xff0c;而 2016 年仅为 3&#xff05;。据阿里达摩院最新2021年科技趋势…

阿里云峰会 | 深化城市计算场景能力,为企业数智化建设提供助推力

在2020阿里云峰会上&#xff0c;阿里云边缘计算技术负责人杨敬宇表示&#xff1a;边缘计算将成为企业数智化进程中重要助推力&#xff0c;而构建城市计算是阿里云边缘计算的核心方向。在会上&#xff0c;杨敬宇还首次公开了智慧高速、云游戏、驾驶辅助等基于城市场景&#xff0…

nacos 适配达梦、人大金仓数据库

文章目录一、准备工作1. 阅读官网文档2. 下载源码&#xff0c;按官网更详细3. 下载达梦、人大金仓数据库驱动二、修改nacos源码2.1. 引入驱动依赖2.2. 引用数据库2.3. 修改配置2.4. 添加属性2.5. 指定驱动名称三、构建3.1. 进入源代码目录3.2. 执行构建3.3. 查看构建包3.4. 最后…

阿里云峰会 | 高并发扛不住、复杂查询慢、数据存不下?

阿里云峰会直播地址 2020年6月9日&#xff0c;“全速重构”2020阿里云线上峰会即将隆重召开。在此次峰会上&#xff0c;阿里云数据库重磅发布云原生分布式数据库 PolarDB-X 、云原生数据仓库AnalyticDB、数据库自治服务DAS、云数据库专属集群、图数据库GDB、云数据库Cassandra版…

软件设计师 - 超键、无损连接、函数依赖

1.闭包 在函数依赖集F下由α函数确定的所有属性的集合为F下α的闭包&#xff0c;记为α 。 闭包算法&#xff1a; result:α; while(result发生变化)dofor each 函数依赖β→γ in F dobeginif β∈result then result:result∪γ;end2.超键 方法一&#xff1a;函数依赖集F下…

赛题解析|初赛赛道三:服务网格控制面分治体系构建

首届云原生编程挑战赛正在报名中&#xff0c;初赛共有三个赛道&#xff0c;题目如下&#xff1a; 赛道一&#xff1a;实现一个分布式统计和过滤的链路追踪 赛道二&#xff1a;实现规模化容器静态布局和动态迁移 赛道三&#xff1a;服务网格控制面分治体系构建 立即报名&#…

使用 SQL 语句实现一个年会抽奖程序

作者 | 董旭阳 责编 | 张文头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;年关将近&#xff0c;抽奖想必是大家在公司年会上最期待的活动了。如果老板让你做一个年会抽奖的程序&#xff0c;你会怎么实现呢&#xff1f;今天给大家介绍一…

杨飞:擅长顺势而为,收获家业两成

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 对比大多数开发者来说&#xff0c;杨飞的职业路线可以说是大相径庭。从大厂到创业公司&#xff0c;从一线城…

Springboot 下 EasyExcel 的数据导入导出

文章目录1.环境准备1.0. excel数据1.1. pom1.2. excle映射实体1.3. 自定义日期转换器1.4.自定义异常2. 数据导出3. 数据导入3.1. excel解析监听类3.2. excel导入1.环境准备 1.0. excel数据 1.1. pom <dependency><groupId>org.springframework.boot</groupId&g…

springboot spring-cloud spring-cloud nacos 整合模板

文章目录二、coding实战2.1. 版本对照2.2. 线上采用版本2.3. yml文件配置2.4. pom依赖2.5. 效果图二、coding实战 2.1. 版本对照 先阅读->版本说明 2.2. 线上采用版本 Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot VersionNacos Version2.2.7.RELEAS…

CSDN居然免费送会员? 赶紧来领!

距离春节还有不到一个月你准备好给家人的春节礼物了吗&#xff1f;疫情下&#xff0c;为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日&#xff0c;人人都可免费领会员&#xff01;助你提前实现CSDN会员卡自由&#xff01;奖品多多&#xff0c;不仅有CSDN月卡会…

《Dubbo迈出云原生重要一步-应用级服务发现解析》

作者 | 刘军&#xff08;陆龟&#xff09; Apache Dubbo PMC 概述 社区版本 Dubbo 从 2.7.5 版本开始&#xff0c;新引入了一种基于实例&#xff08;应用&#xff09;粒度的服务发现机制&#xff0c;这是我们为 Dubbo 适配云原生基础设施的一步重要探索。版本发布到现在已有近…

阿里云HiShop海商创新合作—线上商城这样做更合适

做商城一直是企业商家经久不衰的话题&#xff0c;尽管人们对于网上商城系统的了解已经有很多。距离电商真正来到与消费者做到息息相关&#xff0c;或许还要很长的路要走。人、货、场三种元素没有实现根本联通是一个很重要的原因。那么企业应该怎样搭建线上商城才能最符合当下消…

nacos 开启权限验证后 报错状态 403

文章目录一、漏洞修复1. 未授权访问漏洞2. 解决方案3. 修复效果图二、403 异常解决2.1. 版本对照2.2. 线上采用版本2.3. yml文件配置2.4. pom依赖2.5. 效果图一、漏洞修复 1. 未授权访问漏洞 前因&#xff1a;政府项目被扫出nacos未授权访问漏洞 2. 解决方案 在nacos/conf…

数据爆发式增长下,CIO不可不知的“数据经济学”

导读&#xff1a;6月9日&#xff0c;全速重构•2020阿里云线上峰会如期举行。阿里巴巴研究员、阿里云智能存储资深产品总监Alex Chen做了主题为《面向未来&#xff0c;企业CIO该懂的数据经济学》的分享。在分享中&#xff0c;他畅谈了数据增长所带来的全新挑战&#xff0c;同时…

小程序快速入门

文章目录一、微信小程序和企业微信小程序相同点和区别&#xff1f;1.1.相同点1.2.不同点1.3.受众人群1.4.核心概念1.5.总结二、开发文档2.1.微信开发文档2.2.企业微信开发文档三、小程序申请&#xff1f;3.1.申请流程3.2.主体说明四、小程序如何线下调试&#xff1f;4.1.调试流…