【问题标题】:Implementing a weighted BFS to find shortest path实施加权 BFS 以找到最短路径
【发布时间】:2014-12-09 05:26:15
【问题描述】:

我正在使用邻接列表,我的 addEdge 函数如下所示:

void Graph::addEdge(int start, int end, int weight)
{
    adj[start].push_back(end); 
}

这很好,除非我需要知道边缘的重量。只是现在无法理解它。

【问题讨论】:

    标签: c++ list graph weighted


    【解决方案1】:

    您可以定义一个类来保存边的权重和端点:

    class Edge
    {
      public:
        int endpoint;
        int weight;
    };
    

    当然,这需要修改您的图表; adj 需要存储 Edges 而不是 ints。如果这不可行,您可以像这样将边缘映射到权重:

    std::vector<std::vector<int> > edgeWeights;
    

    对于给定的边 u-v,edgeWeights[u][v] 是边 u-v 的权重。

    同样,您也可以将对(即边)映射到权重:

    std::map<std::pair<int, int>, int> edgeWeights;
    

    可能性无穷无尽。

    【讨论】:

    • 我宁愿使用结构而不是类(少一个字输入;)),但除此之外,我喜欢你的回答。
    • 好的,所以我选择制作 Edge 结构。但是,我将如何处理 addEdge 方法?我必须制作一个临时的 Edge 对象,设置目标和权重,但是它如何知道这些目标和权重与什么相关联?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2012-06-15
    • 2012-11-19
    相关资源
    最近更新 更多