gpt4 book ai didi

algorithm - 使用 DFS 计算有向图中的循环数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:37 25 4
gpt4 key购买 nike

我想计算有向图中可用的有向循环总数(只需要计数)。

您可以假设图形作为邻接矩阵给出。

我知道 DFS 但无法为这个问题制定一个可行的算法。

请提供一些使用DFS 的伪代码。

最佳答案

这个基于 DFS 的算法似乎可行,但我没有证据。

这个算法是从dfs修改过来的,用于拓扑排序(https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search)。

class Solution {
vector<Edge> edges;
// graph[vertex_id] -> vector of index of outgoing edges from @vertex_id.
vector<vector<int>> graph;
vector<bool> mark;
vector<bool> pmark;
int cycles;

void dfs(int node) {
if (pmark[node]) {
return;
}
if (mark[node]) {
cycles++;
return;
}
mark[node] = true;

// Try all outgoing edges.
for (int edge_index : graph[node]) {
dfs(edges[edge_index].to);
}

pmark[node] = true;
mark[node] = false;
}

int CountCycles() {
// Build graph.
// ...

cycles = 0;
mark = vector<bool>(graph.size(), false);
pmark = vector<bool>(graph.size(), false);
for (int i = 0; i < (int) graph.size(); i++) {
dfs(i);
}

return cycles;
}
};

关于algorithm - 使用 DFS 计算有向图中的循环数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com