private void TraverseGraph(DAG DAGgraph, IList <IList <int> > solutions, IList <int> currentSol, int index) { if (DAGgraph.Vertices[index].Edges.Count == 0) { solutions.Add(currentSol); currentSol = null; return; } List <int> edges = DAGgraph.Vertices[index].Edges; foreach (int edge in edges) { List <int> newSolution = new List <int>(); foreach (int e in currentSol) { newSolution.Add(e); } newSolution.Add(edge); TraverseGraph(DAGgraph, solutions, newSolution, edge); } }
public IList <IList <int> > AllPathsSourceTarget(int[][] graph) { int vertices = graph.Length; //int edges = graph.GetUpperBound(1); DAG DAGgraph = new DAG(vertices); int index = 0; foreach (int[] subArray in graph) { Vertex Vertex = new Vertex(); // sort sub Array foreach (int item in subArray) { Vertex.Edges.Add(item); } DAGgraph.Vertices[index++] = Vertex; } IList <IList <int> > results = new List <IList <int> >(); IList <int> currentSol = new List <int>(); currentSol.Add(0); TraverseGraph(DAGgraph, results, currentSol, 0); return(results); }