C++ 如何确定BGL中两个顶点之间是否存在路径
我想使用Boost图库来确定有向无权图上的两个节点之间是否存在路径 因此,我尝试使用呼吸优先搜索或Dijkstra,但我被所有这些参数列表弄糊涂了 创建如下函数的最简单方法是什么:C++ 如何确定BGL中两个顶点之间是否存在路径,c++,graph,dijkstra,boost-graph,C++,Graph,Dijkstra,Boost Graph,我想使用Boost图库来确定有向无权图上的两个节点之间是否存在路径 因此,我尝试使用呼吸优先搜索或Dijkstra,但我被所有这些参数列表弄糊涂了 创建如下函数的最简单方法是什么: bool isPath(src,dest); // doing DFS... bool isPath(int src, int dest) { bool visited[N] = {false}; visited[src] = true; std::stack<int> next; ne
bool isPath(src,dest);
// 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];
}
使用BGL?BFS/DFS是最简单的方法。我将草拟DFS解决方案,因为它不需要太多内存 假设您有大小为
nxn
(N
是图形中的顶点数)的邻接矩阵adj
,具有:
1
在adj[i][j]
中,如果边从i
顶点到j
顶点0
否则bool isPath(src,dest);
// 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];
}
//正在执行DFS。。。
bool isPath(内部src,内部dest){
布尔访问[N]={false};
访问[src]=真;
std::堆栈下一步;
下一步。推送(src);
而(!next.empty()){
int cv=next.top();
next.pop();
对于(整数nv=0;nv
我认为BFS是最简单的方法。看看这个。您只需实现发现顶点
。