C++有向邻接表std::vector<std::vector<unsigned int>> graph,graph是5*5大小的有向邻接表,写一个函数,可以输出多个路径
时间: 2024-12-24 13:33:38 浏览: 6
C++实现有向图邻接表的构建
在C++中,要输出从一个给定节点开始的多条路径,你可以创建一个深度优先搜索(DFS)或广度优先搜索(BFS)函数。这里我们以DFS为例,因为它更适合寻找路径。由于`std::vector<std::vector<unsigned int>>`表示的是有向图的邻接表,每个子`std::vector`代表从当前节点到其相邻节点的边。
以下是一个简单的DFS示例,用于找出从源节点到其他可达节点的所有路径:
```cpp
#include <iostream>
#include <vector>
// 假设邻接表的结构
std::vector<std::vector<unsigned int>> graph(5, std::vector<unsigned int>(5)); // 初始化5x5的邻接表
// DFS 函数
void dfs(unsigned int node, std::vector<unsigned int>& path, std::vector<std::vector<unsigned int>>& visited) {
visited[node] = true;
path.push_back(node);
std::cout << "Path: ";
for (unsigned int i : path) {
std::cout << i << " -> ";
}
std::cout << node << "\n";
// 探索从当前节点出发的所有邻居
for (unsigned int neighbor : graph[node]) {
if (!visited[neighbor]) {
dfs(neighbor, path, visited);
}
}
// 回溯以便继续探索其他路径
path.pop_back();
visited[node] = false;
}
// 示例调用,输出从源节点0的所有路径
void findPaths(unsigned int source) {
std::vector<bool> visited(graph.size(), false); // 记录每个节点是否已被访问
std::vector<unsigned int> path;
dfs(source, path, visited);
}
int main() {
// 填充邻接表...
findPaths(0); // 从节点0开始搜索路径
return 0;
}
```
注意:这个实现假设邻接表已经填充好,并且所有节点都是可达的。在实际应用中,你可能还需要添加错误处理和边界条件检查。
阅读全文