MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 1260๋ฒˆ: DFS์™€ BFS ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 1260๋ฒˆ: DFS์™€ BFS

MUKER 2023. 4. 8. 23:01
 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ

www.acmicpc.net


๋‚˜์˜ ํ’€์ด

let NMV = readLine()!.split(separator: " ").map { Int($0)! }
let (N,M,V) = (NMV[0],NMV[1],NMV[2])
var graph = [Int: [Int]]()
var visited = Array(repeating: false, count: N+1)
var (dfs,bfs) = ([Int](),[Int]())

for _ in 0..<M {
    let road = readLine()!.split(separator: " ").map { Int($0)! }
    graph[road[0]] = (graph[road[0]] ?? []) + [road[1]]
    graph[road[1]] = (graph[road[1]] ?? []) + [road[0]]
}

func DFS(_ n: Int) {
    visited[n] = true
    print(n,terminator: " ")
    dfs.append(n)
    guard graph.keys.contains(n) else { return }
    for i in graph[n]!.sorted(by: <) {
        if visited[i] == false {
            DFS(i)
        }
    }
}

func BFS(_ n: Int) {
    var queue = [Int]()
    queue.append(n)
    visited[n] = false
    while !queue.isEmpty {
        let pop = queue.removeFirst()
        visited[pop] = false
        print(pop,terminator: " ")
        guard graph.keys.contains(n) else { return }
        for i in graph[pop]!.sorted(by: <) {
            if visited[i] == true && !queue.contains(i) {
                queue.append(i)
            }
        }
    }
    
}

DFS(V)
print("")
BFS(V)

ํ’€์ด ํ‚ค์›Œ๋“œ

DFS
BFS
DFS์™€ BFS์˜ ๊ธฐ๋ณธ๊ฐœ๋…์„ ์žก๊ธฐ ์ข‹์€ ๋ฌธ์ œ๋‹ค.
visited๋ฐฐ์—ด์€ DFSํ•จ์ˆ˜์™€ BFSํ•จ์ˆ˜๊ฐ€ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
DFS๋ฅผ ํ’€ ๋•Œ true๋กœ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๊ณ 
BFS๋ฅผ ํ’€ ๋•Œ๋Š” false๋กœ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค.