给定图形 G(V,E)和顶点 v ,如何找到通过简单路径可到达的所有顶点(路径上没有顶点)重复长度正好 k 。
邻接矩阵的幂给出顶点之间的路径数,但它包括非简单路径。
这个问题在多项式时间内是否可以解决?如果没有,是否有任何已知的近似算法。任何文学指南都会很棒。
答案 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,结果包含A
和B
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
注: