我有一些第一次创建和穿越 图的经验。但现在我有一个问题,其中我现在不是, 如果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