【问题标题】:BFS using adjacency lists in STLBFS 在 STL 中使用邻接表
【发布时间】:2014-08-29 14:57:31
【问题描述】:

我正在尝试编写一个使用 STL 在 C++ 中实现 BFS 的程序。我使用嵌套向量表示邻接列表,其中向量中的每个单元都包含连接到特定顶点的节点列表。

while(myQ.size()!=0)
{
    int j=myQ.front();
    myQ.pop();
    int len=((sizeof(adjList[j]))/(sizeof(*adjList[j])));
    for (int i=0;i<len;i++)
    {
        if (arr[adjList[j][i]]==0)
        {
            myQ.push(adjList[j][i]);
            arr[adjList[j][i]]=1;
            dist(v)=dist(w)+1;
        }
    }

}

myQ 是我用来保持节点沿其边缘探索图形的队列。在符号中,adjList[j] 表示指向列表的向量,而 adjList[j][i] 表示该列表中的特定节点。我通过在数组 arr 中输入 1 来存储我是否探索了特定节点。 dist(v)=dist(w)+1 也不是代码的一部分,但我想知道如何以正确的语法编写它,其中我的 v 是新顶点,w 是发现 v 的旧顶点w=myQ.front().

【问题讨论】:

    标签: c++ algorithm graph stl


    【解决方案1】:

    如果我理解了您的问题,那么您需要一个数据结构来存储图形节点的距离。

    这可以使用地图轻松完成。

    使用这个:

    typedef std::map <GraphNode*, int> NodeDist;
    NodeDist node_dist;
    

    替换dist(v)=dist(w)+1;与:

    NodeDist::iterator fi = node_dist.find (w);
    if (fi == node_dist.end())
    {
        // Assuming 0 distance of node w.
        node_dist[v] = 1;
    }
    else
    {
        int w_dist = (*fi).second;
        node_dist[v] = w_dist + 1;
    }
    

    如果我误解了您的问题或给定的解决方案对您不起作用,请告诉我。我们可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多