Blog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2025 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Algorytmy
Algorytmyhard

Co to jest sortowanie topologiczne i kiedy jest możliwe?

Tagi
#topological-sort#dag#graph
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

To porządek wierzchołków taki, że każda krawędź u→v prowadzi od wcześniejszego do późniejszego. Istnieje tylko dla DAG (grafu skierowanego acyklicznego); cykl oznacza brak poprawnej kolejności.

function topoSort(n: number, edges: Array<[number, number]>) {
  const indeg = Array(n).fill(0);
  const g: number[][] = Array.from({ length: n }, () => []);

  for (const [u, v] of edges) {
    g[u].push(v);
    indeg[v]++;
  }

  const q: number[] = [];
  for (let i = 0; i < n; i++) if (indeg[i] === 0) q.push(i);

  const order: number[] = [];
  while (q.length) {
    const u = q.shift()!;
    order.push(u);
    for (const v of g[u]) {
      indeg[v]--;
      if (indeg[v] === 0) q.push(v);
    }
  }

  return order.length === n ? order : null; // null => cycle
}

Powiązane pytania

Algorytmy
Kiedy BFS może zastąpić algorytm Dijkstry?
#shortest-path#bfs#dijkstra
Algorytmy
BFS vs DFS — jaka jest różnica i kiedy użyć którego?
#bfs#dfs#graph
Algorytmy
Co to jest algorytm Dijkstry?
#graph#shortest-path
#dijkstra
Algorytmy
BFS vs DFS?
#graph#bfs#dfs
Struktury danych
Lista sąsiedztwa vs macierz sąsiedztwa: kiedy wybrać które?
#graph#adjacency-list#adjacency-matrix