以上代码是无向图,我说的是有向图,请重新回答
时间: 2024-10-09 11:04:43 浏览: 16
对不起,如果你说的是有向图的情况,代码和策略会有变化。对于有向图,DFS仍沿边的方向进行,不会形成回路。以下是更新后的C++代码:
```cpp
#include <iostream>
#include <vector>
// 定义有向邻接表节点
struct DirectedNode {
int id;
std::vector<int> successors; // 子节点ID列表
};
// 有向邻接表存储结构
std::vector<DirectedNode> directedAdjacencyList(16); // 初始化4x4邻接表
void dfs(int current, std::vector<int>& visited) {
if (visited[current]) return; // 如果已访问,跳过
visited[current] = true;
std::cout << "Visiting node " << current + 1 << ": ";
for (int successor : directedAdjacencyList[current].successors) {
dfs(successor, visited);
}
std::cout << "\n"; // 输出路径结束符
}
// 添加有向边到邻接表
void addDirectedEdge(int start, int end) {
directedAdjacencyList[start].successors.push_back(end);
}
// 示例
int main() {
std::vector<bool> visited(16, false);
// 例如,从节点0开始搜索
addDirectedEdge(0, 1);
addDirectedEdge(0, 3); // 从0出发到1和3
// 开始深度优先搜索
dfs(0, visited);
return 0;
}
```
这里的关键区别在于邻接表中的`successors`只存储了当前节点的出方向邻居,而不是双向连接。在有向图中,DFS仅沿着箭头前进。
阅读全文