我有一些第一次創建和穿越 圖的經驗。但現在我有一個問題,其中我現在不是, 如果boost :: graph有一些算法來解決它。Boost:圖遞歸遍歷和圖副本
這裏是我的圖形清晰度:
const int _AND = 1001;
const int _OR = 1002;
const int _ITEM = 1003;
struct gEdgeProperties
{
string label;
};
struct gVertexProperties
{
string label;
int typ; // _AND, _OR, ITEM
};
typedef adjacency_list< vecS, vecS, undirectedS, gVertexProperties, gEdgeProperties>
BGraph;
所以BGraph包含的項目以及它們之間的邏輯關係。 現在我想將這個圖轉換成多個圖,其中每個圖都應該包含NO或者關係,但是全部由OR頂點定義組合替代項 和它們的AND關係代表 。
一個例子:如果存在三個項A,B,C 相關,以便:a和(B OR C) 然後遍歷的結果應該是兩個曲線圖, 含有下列組合: (1) A和B (2)A和C
我的(簡單)的想法,現在是遍歷圖形,每一次 遍歷找到一個OR-頂點,複製整個 圖表,並按照從那裏在每個部分OR節點遞歸:
if graph [vertex] == OR {
for(... //頂點的每個子頂點 BGraph newGraph = copy(Graph);遍歷(newGraph,childVertex); }}
這將無法正常工作,因爲我的每個孩子 的遞歸調用會懷念這裏的堆疊結構(信息,怎麼回來向上 中圖)。這意味着:遍歷將向下爬升正確,但是不會再向上爬升。
我不知道,如果有更多(或根本)有效的方法來解決這樣一個與boost :: graph及其嵌入式算法有關的問題 。
但是對我來說這似乎是一個有趣的問題,所以我想 在這裏討論它,也許它會導致boost :: graph更深入的洞察力。
謝謝!
謝謝。這非常有幫助。我將嘗試將你的代碼移植到python中,因爲它有你的代碼中的列表結構。這是MatLab嗎?感謝您的解決方案! – Mike75 2014-09-26 23:55:15