我想使用Boost Graph Library来确定定向未加权图上的2个节点之间是否存在路径。
因此我尝试使用Breath-First-Search或Dijkstra,但我对所有这些参数列表感到困惑。
创建这样的函数的最简单方法是什么:
bool isPath(src,dest);
用BGL?
答案 0 :(得分:1)
BFS / DFS是最简单的方法。我将草拟DFS解决方案,因为它的内存消耗较少。
假设你有大小为adj
的邻接矩阵N x N
(N
是图中的顶点数):
1
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];
}