1 无向图(Un-directed Graph)全部环

图算法中需要求解全部的环。

2 方法

使用图着色方法,用唯一的数字标记不同循环的所有顶点。图形遍历完成后,将所有类似的标记数字推送到邻接列表,并相应地打印邻接列表。

3 算法

  1. 将边插入到邻接列表中。
  2. 调用DFS函数,该函数使用着色方法标记顶点。
  3. 只要存在部分访问的顶点,回溯到到达当前顶点,并用循环编号标记所有顶点。标记完所有顶点后,增加循环数。
  4. Dfs完成后,对边进行迭代,并将相同标记编号的边推送到另一个邻接列表。
  5. 在另一个邻接列表中迭代并按编号打印顶点循环。

4 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.TGraph
{
public partial class Graph
{
private static readonly int N = 100000;
private static List[] graph = new List[N];
private static List[] cycles = new List[N];
private static int cyclenumber;

private static void dfs_cycle(int u, int p, int[] color, int[] mark, int[] par)
{
if (color[u] == 2)
{
return;
}

if (color[u] == 1)
{