private readonly int[] _rank; // rank[v] = position of vertex v in topological order #endregion Fields #region Constructors /// <summary> /// Determines whether the digraph <tt>G</tt> has a topological order and, if so, /// finds such a topological order. /// </summary> /// <param name="g">g the digraph</param> public Topological(Digraph g) { var finder = new DirectedCycle(g); if (!finder.HasCycle()) { var dfs = new DepthFirstOrder(g); _order = dfs.ReversePost(); _rank = new int[g.V]; var i = 0; foreach (int v in _order) _rank[v] = i++; } }
private readonly int[] _rank; // rank[v] = position of vertex v in topological order /// <summary> /// Determines whether the digraph <tt>G</tt> has a topological order and, if so, /// finds such a topological order. /// </summary> /// <param name="g">g the digraph</param> public Topological(Digraph g) { var finder = new DirectedCycle(g); if (!finder.HasCycle()) { var dfs = new DepthFirstOrder(g); _order = dfs.ReversePost(); _rank = new int[g.V]; var i = 0; foreach (int v in _order) { _rank[v] = i++; } } }