μμκ° μ ν΄μ Έμλ μμ μ μ°¨λ‘λ‘ μνν΄μΌν λ κ·Έ μμλ₯Ό κ²°μ ν΄μ£ΌκΈ° μν΄ μ¬μ©νλ μκ³ λ¦¬μ¦μ΄λ€.
μλ₯Ό λ€μ΄λ³΄λ©΄,
μμ κ°μ 컀리νλΌμμ μκ³ λ¦¬μ¦μ μκ°νκ³ μ νλ©΄ μ μκ³Όλͺ©λ€μ μκ°ν νμ λ€μ΄μΌνλ€κ³ νμ λ,
μ΄μ°μν → Cνλ‘κ·Έλλ° → κ°μ²΄μ§ν₯νλ‘κ·Έλλ° → μλ£κ΅¬μ‘° → μκ³ λ¦¬μ¦ μμλ‘ μκ°μ μ²μ νλ©΄ λλ€.
μ΄ μΈμλ μ¬λ¬ κ°μ μμκ° μ‘΄μ¬ν μ μλ€.
μ ν κ΄κ³κ° λͺ ννμ λ μμλ₯Ό κ²°μ νμ¬ μ λ ¬νλ μκ³ λ¦¬μ¦μΈ κ²μ΄λ€.
πΉ μμ μ λ ¬ νΉμ§
- μ¬μ΄ν΄μ΄ λ°μνμ§ μλ λ°©ν₯μ± κ·Έλνμμμ μ λ ¬ π μ¬μ΄ν΄μ΄ μλ€λ©΄ μμ μ λ ¬ μν X (μμμ μ μ°Ύμ μ μμΌλ―λ‘)
- ν λλ μ€ν μ¬μ©
- μ§μ μ°¨μ κ³ λ €
πΉοΈ μκ³ λ¦¬μ¦ κ³Όμ
μ§μ μ°¨μλ μ μ μ λ€μ΄μ€λ κ°μ μμ΄κ³ , λΉ¨κ°μ μ«μλ μ§μ μ°¨μλ₯Ό λνλΈ κ²μ΄λ€.
- μ§μ μ°¨μκ° 0μΈ μ μ μ νμ λ£λλ€.
- νμμ μ μ μ κΊΌλ΄κ³ κ·Έ μ μ μ μ§μΆ κ°μ μ μ κ±°νλ€.
- μ κ±° ν μλ‘ μ§μ μ°¨μκ° 0μ΄ λλ μ μ μ΄ μμΌλ©΄ κ·Έκ²μ νμ λ£λλ€.
- νκ° κ³΅λ°±μ΄ λ λκΉμ§ 2, 3λ² λ°λ³΅
1. μ§μ μ°¨μκ° 0μΈ μ μ μ νμ λ£λλ€. κ·Έλν μλμ μλ νλ μ§μ μ°¨μλ₯Ό λνλΈ νμ΄λ€.
2. νμμ μ μ μ κΊΌλ΄κ³ κ·Έ μ μ μ μ§μΆ κ°μ μ μ°Ύμ μΈμ ν κ³³μ μ§μ μ°¨μλ₯Ό 1μ© κ°μμν¨λ€.
3. κ°μμν¨ μ§μ μ°¨μ μ€ 0μ κ°μ κ°μ§κ³ μλ μ μ μ΄ μμΌλ©΄ νμ λ£λλ€. 2μ 5μ μ§μ μ°¨μκ° 0μ΄ λμμΌλ―λ‘ νμ λ£μλ€.
4. μμ κ°μ κ³Όμ μ λ°λ³΅νλ©΄ λ€μκ³Ό κ°λ€.
π©π» μμ μ λ ¬ ꡬν μ½λ
import java.util.*;
public class TopologicalSort{
static int n, e;
public static void main(String[] args){
n = 7; // μ μ κ°μ
e = 8; // κ°μ κ°μ
int[] indegree = new int[n+1]; // κ°μ κ°μ λ΄λ λ°°μ΄
ArrayList<Integer>[] graph = new ArrayList<>[n+1]; // κ·Έλν κ΄κ³ νν
for(int i=1; i<=n; i++){
group[i] = new ArrayList<Integer>();
}
// κ°μ λͺ©λ‘ v1 -> v2
int[] v1 = {1, 1, 2, 2, 5, 3, 6, 4};
int[] v2 = {2, 5, 3, 6, 6, 4, 4, 7};
// v1 -> v2 μΈμ 리μ€νΈ μμ±
// v2 μμμ κ°κ° κ°μλ μ§μ
μ°¨μλ₯Ό μλ―Έ
for(int i=0; i<e; i++;){
int c1 = v1[i];
int c2 = v2[i];
graph[c1].add(c2);
indegree[c2]++; // μ§μ
μ°¨μ μ¦κ°
}
topologicalSort(indegree, graph);
}
static void topologicalSort(int[] indegree, ArrayList<Integer>[] graph){
Queue<Integer> queue = new LinkedList<>();
Queue<Integer> result = new LinkedList<>();
// νμ μ§μ
μ°¨μκ° 0μΈ λ
Έλ λ΄κΈ°
for(int i=0; i<n+1; i++){
if(indegree[i]==0) queue.add(i);
}
while(!queue.isEmpty()){
int node = queue.poll();
result.add(node);
for(Integer i : group[node]){
indegree[i]--;
if(indegree[i]==0) queue.add(i);
}
}
System.out.println(result);
}
}
κ΄λ ¨ λ¬Έμ
https://arc.net/l/quote/rqqmbdep
2252λ²: μ€ μΈμ°κΈ°
첫째 μ€μ N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. Mμ ν€λ₯Ό λΉκ΅ν νμμ΄λ€. λ€μ Mκ°μ μ€μλ ν€λ₯Ό λΉκ΅ν λ νμμ λ²νΈ A, Bκ° μ£Όμ΄μ§λ€. μ΄λ νμ Aκ° νμ Bμ μμ μμΌ νλ€λ μ
www.acmicpc.net
https://www.acmicpc.net/problem/1516
1516λ²: κ²μ κ°λ°
첫째 μ€μ 건물μ μ’ λ₯ μ N(1 ≤ N ≤ 500)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ κ° κ±΄λ¬Όμ μ§λλ° κ±Έλ¦¬λ μκ°κ³Ό κ·Έ 건물μ μ§κΈ° μν΄ λ¨Όμ μ§μ΄μ ΈμΌ νλ 건물λ€μ λ²νΈκ° μ£Όμ΄μ§λ€. 건물μ λ²νΈλ 1λΆ
www.acmicpc.net
'μκ³ λ¦¬μ¦ > ποΈ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π λ¬ν½μ΄ μ΄λ ν¨μ¨μ μΈ μ½λ π (0) | 2024.03.30 |
---|---|
LCS (μ΅μ₯ κ³΅ν΅ λΆλΆ μμ΄) (0) | 2024.03.11 |
Simulation - 2μ°¨μ λ¬ν½μ΄ λ°°μ΄ π (0) | 2024.02.08 |
DP - Knapsack (λ°°λλ¬Έμ ) (1) | 2024.02.05 |
LIS (μ΅μ₯μ¦κ°λΆλΆμμ΄) (1) | 2023.12.07 |