【问题标题】:How to determine if a path exists between 2 vertices in BGL如何确定BGL中2个顶点之间是否存在路径
【发布时间】:2015-03-09 13:19:14
【问题描述】:
我想使用 Boost Graph Library 来确定有向未加权图上的 2 个节点之间是否存在路径。
因此,我尝试使用 Breath-First-Search 或 Dijkstra,但我对所有这些参数列表感到困惑。
创建这样的函数的最简单方法是什么:
bool isPath(src,dest);
与 BGL?
【问题讨论】:
-
我认为 BFS 是最简单的方法。看看这个question。你只需要实现discover_vertex。
标签:
c++
graph
dijkstra
boost-graph
【解决方案1】:
BFS/DFS 是最简单的方法。我将草拟 DFS 解决方案,因为它不那么占用内存。
假设您有大小为N x N 的邻接矩阵adj(N 是图中的顶点数):
-
1 in adj[i][j] 如果你的边从i 顶点到j 顶点,
-
0 否则。
在这种情况下,你可以有这样的东西:
// doing DFS...
bool isPath(int src, int dest) {
bool visited[N] = {false};
visited[src] = true;
std::stack<int> next;
next.push(src);
while(!next.empty()) {
int cv = next.top();
next.pop();
for (int nv = 0; nv < N; ++nv) {
if (!visited[nv] && adj[cv][nv] == 1) {
visited[nv] = true;
next.push(nv);
}
}
}
// dest was reached from src?
return visited[dest];
}