Algorithm 找到所有可能的欧拉循环

Algorithm 找到所有可能的欧拉循环,algorithm,graph,graph-theory,Algorithm,Graph,Graph Theory,我已经实现了一个算法来为无向图中给定的起始顶点寻找一个Euler循环(使用DFS和删除访问的边),但它总是只返回一条路径。如何修改算法以搜索顶点的所有可能Euler循环 以下是相关代码: typedef int Graph[200][200]; // adjacency matrix int v, e; // vertex count, edge count ...... void DFS(Graph &G, int x) { int i; Push(x);

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

以下是相关代码:

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;
    }
typedef int-Graph[200][200];//邻接矩阵
int v,e;//顶点计数,边计数
......
无效DFS(图形和G,整数x){
int i;
推(x);
对于(i=0;i0){
G[i][x]=0;
G[x][i]=0;
DFS(G,i);
打破
}

}

您希望循环遍历所有顶点。

递归调用后,应重新插入之前删除的边,并消除中断

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;
        }

}
void DFS(图&G,int x)
{
int i;
推(x);
对于(i=0;i0)
{
G[i][x]*=-1;
G[x][i]*=-1;
DFS(G,i);
G[i][x]*=-1;
G[x][i]*=-1;
}
}

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

您可以发布您的实现吗?它不需要太多的更改。你没有测试桥梁吗?这不是欧拉回路!?或者euler回路和euler循环之间是否存在差异?是的,目前没有电桥检测。只是想先让它在简单的图形上工作。为什么要投否决票?这不是一个严肃的回答吗?他可以尝试所有的组合?可以有多个循环从一个顶点开始循环,尽管所有顶点都不能解决这个问题。顺便说一句,向下投票不是我的。嗯,它似乎产生了所有可能的循环,而不仅仅是欧拉循环。但无论如何,这很有帮助。从中选择欧拉循环非常容易,我想这正是我在这个问题上所期望的。