1 无向图(Un-directed Graph)全部环
图算法中需要求解全部的环。
2 方法
使用图着色方法,用唯一的数字标记不同循环的所有顶点。图形遍历完成后,将所有类似的标记数字推送到邻接列表,并相应地打印邻接列表。
3 算法
- 将边插入到邻接列表中。
- 调用DFS函数,该函数使用着色方法标记顶点。
- 只要存在部分访问的顶点,回溯到到达当前顶点,并用循环编号标记所有顶点。标记完所有顶点后,增加循环数。
- Dfs完成后,对边进行迭代,并将相同标记编号的边推送到另一个邻接列表。
- 在另一个邻接列表中迭代并按编号打印顶点循环。
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)
{