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

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

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

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

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

【问题讨论】:

标签: c++ graph breadth-first-search dijkstra


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2018-12-31
    相关资源
    最近更新 更多