邻接表中输出两点间的所有路径C
时间: 2023-10-13 20:06:21 浏览: 143
C++/输出图中两点间所有的路径
要输出邻接表中两点间的所有路径C,可以使用深度优先搜索(DFS)算法来完成。具体步骤如下:
1. 首先定义一个visited数组,用来记录每个节点是否被访问过。
2. 从起点开始进行DFS遍历,每当访问到一个节点时,将该节点标记为已访问,并将该节点加入到当前路径中。
3. 如果当前节点为终点,则将当前路径输出。
4. 否则,遍历当前节点的所有邻居节点,如果该邻居节点没有被访问过,则递归访问该邻居节点。
5. 遍历完当前节点的所有邻居节点后,将该节点从当前路径中移除,并将visited数组中该节点的标记重置为未访问状态。
以下是代码示例:
```
void dfs(int cur, int end, vector<int>& path, vector<vector<int>>& graph, vector<bool>& visited) {
visited[cur] = true;
path.push_back(cur);
if (cur == end) {
// 当前节点为终点,输出路径
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
} else {
// 遍历当前节点的所有邻居节点
for (int i = 0; i < graph[cur].size(); i++) {
int next = graph[cur][i];
if (!visited[next]) {
dfs(next, end, path, graph, visited);
}
}
}
// 回溯,将当前节点从路径中移除,并将visited数组中该节点的标记重置为未访问状态
path.pop_back();
visited[cur] = false;
}
void findAllPaths(int start, int end, vector<vector<int>>& graph) {
vector<int> path;
vector<bool> visited(graph.size(), false);
dfs(start, end, path, graph, visited);
}
```
其中,graph为邻接表表示的图,start和end为起点和终点的编号。调用findAllPaths函数即可输出所有路径。
阅读全文