BFS使用STL中的邻接列表

时间:2014-07-08 18:29:48

标签: c++ algorithm graph stl

我正在尝试编写一个使用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 ie W = myQ.front()。

1 个答案:

答案 0 :(得分:0)

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

这可以使用map轻松完成。

使用此:

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;
}

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