AOV网,顶点表示活动,弧表示活动间的优先关系的有向图。
即如果a->b,那么a是b的先决条件。
AOE网,边表示活动,是一个带权的有向无环图,
其中顶点表示事件,弧表示活动,权表示活动持续时间。
按我理解,你要求拓扑序列就是AOV,求关键路径就是AOE
具体是要实现 计算一个电力网络的东西 有很多节点互相连接 有一个现成的算法可以计算节点之间断路的风险
现在算法已经弄好了 但是网状的结构如何在c++中实现?
我不是学计算机的,因为会一点编程被人赶鸭子上架来干这个。。。
希望指出一点思路就可以了
c/c++的话,可以自己定义一个结构体。
按照你描述的情况,这个结构体或者类,可以定义为如下式样(推荐定义成类):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class ElectricNode
{ // 这里仅提供一些基本供参考的成员定义,我也不知道你要保存什么东西
public :
ElectricNode();
virtual ~ElectricNode();
private :
// 这里定义一些这个节点相关的信息(不是太懂,猜想比如有节点的电压啊、最大允许的电流负荷啊什么的,都能做成员变量保存在这里,这些是节点相关的信息。)
// 最重要的是一个网状的结构体系,因为某一个节点可能与未知数量的节点连接,而且为了便于修改连接关系,推荐使用c++现有的vector结构做拓展
vector<ElectricNode> m_nodes_connected; // 只保存与他相连的节点
}; 整体的话,可以直接用一个vector<ElectricNode>存储所有的电网的点,因为每一个ElectricNode类都记住了这个点相关的信息以及和他相连接的点,自然就形成了一个网了。 因为STL的这些标准容器都提供了数组越界检查、内存自动分配、以及一系列的存取查找删改相关的方法,操作起来比较方便,比自己写数组管理方便很多,也比较安全可靠。再加上类的话,能够提供一些方法,比如内一个节点自己里面就能做一些短路风险相关的计算准备工作,或者直接提供准确的数值,对于外部叠加上来的算法,不论是书写还是计算,都方便很多,就算日后调整、修改算法,也是十分方便的 |