public void getDirectPrerequisitesList(TargetLinkedList targetLinkedList) { LinkedList <int[]> tLinkedList = targetLinkedList.TargetList; int[] currentHead = tLinkedList.First.Value; List <int[]> combinedGroupPrerequisites = joinPrereq(currentHead); visitedCourse[currentHead] = true; if (combinedGroupPrerequisites.Count == 0) { done = true; } else { foreach (int[] preArr in combinedGroupPrerequisites) { LinkedList <int[]> newTLinkedList = new LinkedList <int[]>(tLinkedList); newTLinkedList.AddFirst(preArr); visitedCourse.Add(preArr, false); tempTargetPath.Add(new TargetLinkedList(newTLinkedList)); } } }
public List <TargetLinkedList> getDirectPrerequisitesList2(TargetLinkedList targetLinkedList) { List <TargetLinkedList> tempPath = new List <TargetLinkedList>(); Stack <TargetLinkedList> newStack = new Stack <TargetLinkedList>(); newStack.Push(targetLinkedList); int[] currentHead = new int[] { }; tempPath.Add(targetLinkedList); LinkedList <int[]> currentLinkedList = targetLinkedList.TargetList; List <TargetLinkedList> newPath = new List <TargetLinkedList>(tempPath); while (tempPath.Count != 0) { foreach (TargetLinkedList tl in newPath) { currentLinkedList = newStack.Pop().TargetList; currentHead = currentLinkedList.First.Value; //while it's not empty, keep running List <int[]> combinedGroupPrerequisites = joinPrereq(currentHead); // tempPath = new List<TargetLinkedList>(); foreach (int[] preArr in combinedGroupPrerequisites) { LinkedList <int[]> newTLinkedList = new LinkedList <int[]>(currentLinkedList); newTLinkedList.AddFirst(preArr); //tempPath.Add(new TargetLinkedList(newTLinkedList)); newStack.Push(new TargetLinkedList(newTLinkedList)); //globalStack.Push(new TargetLinkedList(newTLinkedList)); } } newPath = new List <TargetLinkedList>(tempPath); String result = JsonConvert.SerializeObject(newPath); // return result; } return(newPath); // } }