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的這些標准容器都提供了數組越界檢查、內存自動分配、以及一系列的存取查找刪改相關的方法,操作起來比較方便,比自己寫數組管理方便很多,也比較安全可靠。再加上類的話,能夠提供一些方法,比如內一個節點自己里面就能做一些短路風險相關的計算准備工作,或者直接提供准確的數值,對於外部疊加上來的算法,不論是書寫還是計算,都方便很多,就算日后調整、修改算法,也是十分方便的
|