我有一个无环有向图。我想为每个顶点分配级别,以保证如果边(v1,v2)在图中,则level(v1)>level(v2)。我还希望当(v1,v2)和(v3,v2)都在图中时,level(v1)=level(v3)。此外,可能的级别是离散的(最好将它们视为自然数)。理想情况下,当(v1,v2)在图中且没有其他路径从v1到v2时,level(v1)=level(v2)+1,但有时在其他约束条件下这是不可能的,例如考虑一个由五个顶点组成的图,其中包含边(a,b) (b,d) (d,e) (a,c) (c,e)。
有人知道解决这个问题的算法吗?我的图相当小(|V|<=25左右),所以我不需要非常快的算法——简单性更重要。
我目前的想法是找到最小元素,将其分配为级别0,找到所有父节点,将它们分配为级别1,并通过为适当的顶点添加+0.5来解决矛盾,但这似乎非常糟糕。
另外,我感觉删除所有“隐含”的边可能会有帮助(即,如果图包含(v1,v2)和(v2,v3),则删除(v1,v3)。
有人知道解决这个问题的算法吗?我的图相当小(|V|<=25左右),所以我不需要非常快的算法——简单性更重要。
我目前的想法是找到最小元素,将其分配为级别0,找到所有父节点,将它们分配为级别1,并通过为适当的顶点添加+0.5来解决矛盾,但这似乎非常糟糕。
另外,我感觉删除所有“隐含”的边可能会有帮助(即,如果图包含(v1,v2)和(v2,v3),则删除(v1,v3)。