Advertisement
vkreal

topological-sorting

Jun 21st, 2022
1,303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // https://leetcode.com/explore/learn/card/graph/623/kahns-algorithm-for-topological-sorting/3868/
  2. /**
  3.  * @param {number} numCourses
  4.  * @param {number[][]} prerequisites
  5.  * @return {number[]}
  6.  */
  7. var findOrder = function(n, classes) {
  8.     // There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You  are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.
  9.    
  10.     const adj = [...Array(n)].map(()=>new Set());
  11.     for(const [a, b] of classes) {
  12.         adj[a].add(b);  //  indegree // incoming
  13.     }
  14.     const que = [];
  15.     for(let i=0; i<adj.length; i++) {
  16.         let set = adj[i];
  17.         if(set.size == 0) {
  18.             que.push(i);
  19.         }
  20.     }
  21.     if(!que.length) return [];
  22.     let ans = [];
  23.     while(que.length) {
  24.         const node = que.shift();
  25.         ans.push(node);
  26.         for(let i=0; i<adj.length; i++) {
  27.             const set = adj[i];
  28.             if(set.has(node)) {
  29.                 set.delete(node);
  30.                 if(set.size == 0) {
  31.                     que.push(i);
  32.                 }
  33.             }
  34.         }
  35.     }
  36.     for(let i=0; i<adj.length; i++) {
  37.         if(adj[i].size > 0) return [];
  38.     }
  39.     return ans;
  40. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement