[2252] 줄 세우기

toru·2022년 9월 30일
0
앞에 와야하는 a를 기준으로 배열을 만들고 b를 원소로 삼는다.
비교한 사람들 안에서만 순서를 지키면 된다.
// 위상정렬
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = p[0], m = p[1]
var line = [[Int]](repeating: [], count: n+1)
var head = [Bool](repeating: true, count: n+1)
var visited = [Bool](repeating: false, count: n+1)
var result = [Int]()

for _ in 0..<m {
    let t = readLine()!.split(separator: " ").map{Int(String($0))!}
    let (front,back) = (t[0],t[1])
    line[front].append(back)
    
    if head[back] {
        head[back] = false
    }
}

func dfs(_ n: Int) {
    for i in line[n] {
        if !visited[i] {
            visited[i] = true
            dfs(i)
        }
    }
    result.append(n)
}

for i in 1...n where head[i] {
    dfs(i)
}
print(result.reversed().map{String($0)}.joined(separator: " "))
profile
iOS

0개의 댓글