我正在尝试编写一个使用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()。
答案 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;
}
如果我误解了您的问题或者给定的解决方案对您不起作用,请告诉我。我们可以继续努力。