我已经实现了一种算法,可以在无向图中找到给定起始顶点的欧拉循环(使用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; } }
现在,您所需要的只是一种方法,以弄清何时生成了一个完整的周期,以便可以打印并继续进行下一个周期。当您消除了图形的每个边缘时,就会发生这种情况。