algorithm - 找到所有可能的欧拉循环

标签 algorithm graph graph-theory

我已经实现了一种算法来为无向图中给定的起始顶点找到欧拉循环(使用 DFS 并删除已访问的边),但它总是只返回一条路径。如何修改算法以搜索顶点的所有可能欧拉循环?

相关代码如下:

typedef int Graph[200][200]; // adjacency matrix
int v, e; // vertex count, edge count

......

void DFS(Graph &G, int x) {
    int i;
    Push(x);
    for (i = 0; i < v; i++)
        if (G[i][x] > 0) {
            G[i][x] = 0;
            G[x][i] = 0;
            DFS(G, i);
            break;
    }

最佳答案

在递归调用之后,您应该重新插入之前删除的边,并去掉断点。

void DFS(Graph &G, int x) 
{
    int i;
    Push(x);
    for (i = 0; i < v; i++)
        if (G[i][x] > 0) 
        {
            G[i][x] *= -1;
            G[x][i] *= -1;
            DFS(G, i);
            G[i][x] *= -1;
            G[x][i] *= -1;
        }

}

您现在所需要的只是一种确定何时生成完整周期的方法,以便您可以打印它并继续进行下一个。当您消除了图表的每条边时,就会发生这种情况。

关于algorithm - 找到所有可能的欧拉循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023137/

相关文章:

algorithm - 第 k 个最小元素的最大堆与最小堆

c++ - 在 C++ 中创建随机无向图

algorithm - 查找图中所有独立连接

artificial-intelligence - 在什么情况下BFS和DFS会比A *搜索算法更有效?

javascript - 类型错误 : The comparison function must be either a function or undefined

c++ - 小的重复算术与创建新变量

java - Katz相似度-矩阵/图运算(JAVA + JUNG)

c++ - 使用 Boost 查找大图的连接组件

php - 如何在 PHP 中绘制有向图?

performance - 用 D 语言比较两个内存块的最有效方法是什么?