【发布时间】:2017-09-02 09:44:40
【问题描述】:
我的目标是在加权无向图中找到所有循环及其各自的权重。循环的权重定义为构成循环的路径的权重之和。我的预设算法执行以下操作:
dfs(int start, int now,int val)
{
if(visited[now])
return;
if(now==start)
{
v.push_back(val);// v is the vector of all weights
return;
}
dfs through all nodes neighbouring to now;
}
我从每个起点呼叫dfs():
for(int i=0;i<V;++i)
{
initialise visited[];
for(int j=0;j<adj[i].size();++j)// adj is the adjacency matrix
dfs(i,adj[i][j].first,adj[i][j].second);
// adj is a vector of vector of pairs
// The first element of the pair is the neighbour index and the second element is the weight
}
所以这个算法的整体复杂度是O(V*E)(我想是的)。任何人都可以提出更好的方法吗?
【问题讨论】:
-
在图完整的特定情况下,任何节点序列都构成一个循环。因此(如果我正确理解了要求),一个好的算法似乎不可能在最坏的情况下不需要指数复杂度。
-
正如查询人所说,可能有指数数量的周期。你真的需要每一个重量(那么除了指数级的结果之外别无他法),或者可能只是最小、最大或类似的东西?
-
@deviantfan 确切地说,我需要知道任何重量是否是奇数。但它不需要计算所有的权重吗? (重量 == 一个周期的重量)
-
@yobro97 不,它不需要。我正在写一个答案...