距离K的顶点

时间:2012-11-12 00:27:01

标签: algorithm graph-algorithm

给定图形 G(V,E)和顶点 v ,如何找到通过简单路径可到达的所有顶点(路径上没有顶点)重复长度正好 k

邻接矩阵的幂给出顶点之间的路径数,但它包括非简单路径。

这个问题在多项式时间内是否可以解决?如果没有,是否有任何已知的近似算法。任何文学指南都会很棒。

2 个答案:

答案 0 :(得分:1)

我只回答第一个问题:“它在多项式时间内是否可以解决?”。

假设它在多项式时间内是可解的。然后为k=|V|-1求解并选择任何结果顶点。删除此顶点并为k=|V|-2解决此问题。生成的顶点集应包含至少一个连接到最后删除的顶点的顶点。删除此顶点并继续k=|V|-i的处理,直到保留单个起始顶点。您刚刚使用多项式时间算法找到原始图的Hamiltonian path

由于哈密顿路径问题是NP完全的,因此OP中的问题也很难在多项式时间内解决。

答案 1 :(得分:0)

下面给出的算法将找到一个节点列表,这些节点的起始节点k的最小距离等于v。 EG:给出三角形图v,A和B if:

  • k为0,结果为v
  • k为1,结果包含AB
  • k为2或更多,结果为empty

伪代码:

FindNodesWithShortestPath_K(G, v, k):
    create empty list R
    create empty queue Q

    mark v as visited
    set v.distance to 0
    add v to Q

    while Q is not empty:
        t <- dequeue node from Q
        if t.distance == k:
            add t to R
        else if t.distance > k:
            break
        else                
            for all neighbors u of t:
                if u is not marked as visited:
                    mark u as visited
                    u.distance = t.distance + 1
                    enqueue u onto Q

    return result

注:

  • 检查节点是否标记为已访问保证简单路径
  • 节点的初始距离不相关
  • 如果t.distance == k,则t属于R和t邻居(在Q中不是alredy)
  • if t.distance&gt; k,即使Q不为空,算法也会停止。给定算法实现,Q中节点的距离不减小
  • R和Q上的操作可以在O(1)中运行,具体取决于实现。该算法具有O(| E | + | V |)
  • 的最坏情况