Leecode210
题目
给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。
分析
该题入上一道的课程表一,只是返回的值不同而已,但步骤都是相同的。
解法
直接上代码了:
public int[] FindOrder(int numCourses, int[][] prerequisites) {
IEnumerable<int> enumerable = Enumerable.Range(0, numCourses);
List<int>[] list = enumerable.Select(c => new List<int>()).ToArray();
foreach (int[] item in prerequisites)
{
list[item[0]].Add(item[1]);
}
var trueList = new HashSet<int>();
for (int i = 0; i < numCourses; i++)
{
if (!DFS(trueList, new HashSet<int>(), list, i))
{
return new int[0];
}
}
return trueList.ToArray();
}
public bool DFS(HashSet<int> trueList, HashSet<int> used,List<int>[] list, int id)
{
if (trueList.Contains(id))
{
return true;
}
if (used.Contains(id))
{
return false;
}
else
{
used.Add(id);
}
foreach (int item in list[id])
{
if (DFS(trueList, used, list, item) == false)
{
return false;
}
}
trueList.Add(id);
return true;
}
效果: