寻找无向图的最重路径

Posted

技术标签:

【中文标题】寻找无向图的最重路径【英文标题】:Finding the heaviest path of an undirected graph 【发布时间】:2021-12-18 21:02:11 【问题描述】:

我正在尝试解决特定问题,但找不到任何合适的解决方案。 我会解释......我有一个图表,其中每个节点都有一个数值。 从我选择的节点开始,我必须找到节点值总和最重的路径。 然而,这个问题的特殊之处在于,我只能通过同一座桥一次,但可以在同一个节点上多次通过。

更准确地说,如果我有这种类型的图表

从节点 1 开始,我应该得到的解决方案是: 1->2->0->1->4,总重量为23。

我尝试应用 Dijkstra 或 Prime 等已知算法,但我认为它们不是正确的解决方案。 我在互联网上找不到太多。有人能给我任何解释或建议吗? 在你看来,考虑给拱门上色而不是结上色能引导我找到解决方案吗? 一千个感谢

【问题讨论】:

这个问题看起来和the closed question that you deleted a day ago没有太大区别。 找到所有路径并选择最重的路径。 @c0der 那么您是否也认为问题的唯一解决方案是对其应用回溯? 【参考方案1】:

我使用这样的 dfs 变体解决了这个问题:

int dfs(vector<vector<int> >& g,
        int* cost, int u, int pre)
    vis[u] = true;
    dp[u] = cost[u];
    bool check = 1;
    int cur = cost[u];
    for (auto& x : g[u]) 
        if (vis[x] && x != pre) 
            check = 0;
        
        else if (!vis[x]) 
            check &= dfs(g, cost, x, u);
            cur = max(cur, cost[u] + dp[x]);
        
    
    dp[u] = cur;
    if (!check) 
        canTake += cost[u];
        path.push_back(u);
    
    else 
        best = max(best, dp[u]);
        last_node = u;
    
    return check;

【讨论】:

以上是关于寻找无向图的最重路径的主要内容,如果未能解决你的问题,请参考以下文章

算法导论—无向图的遍历(BFS+DFS,MATLAB)

无向图的最短环(需要输出路径)

HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)

无向图的强连通分量

2023-03-28 图的基本表示

数据结构学习笔记——图的基本知识