题目描述
解题思路
判断有向图中是否存在环
1.用拓扑排序:
A:初始化一个队列
B:入度为0则入队
C:遍历队首元素,指向的节点入度-1
循环执行BC
public class t1 {
int cnt=0;//统计入队个数
public boolean canFinish(int numCourses, int[][] prerequisites) {
//统计入度表
int[] indegree = new int[numCourses];
//邻接表
List<Integer>[] adj = new List[numCourses];
for (int i = 0; i < numCourses; i++) {
adj[i] = new ArrayList<>();
}
for (int i = 0; i < prerequisites.length; i++) {
indegree[prerequisites[i][1]]++;
adj[prerequisites[i][0]].add(prerequisites[i][1]);
}
//入度为0的入队
Queue<Integer>queue = new LinkedList<>();
for (int i = 0; i < indegree.length; i++) {
if (indegree[i] == 0) {
queue.add(i);
cnt++;
}
}
//队列不为空就循环
while (!queue.isEmpty()){
int pre = queue.poll();//取出队首元素
for (int i = 0; i < adj[pre].size(); i++) {
if (--indegree[adj[pre].get(i)] == 0) {
queue.add(adj[pre].get(i));
cnt++;
}
}
}
//所有元素都入队,那么就无环
return cnt == numCourses;
}
}