티스토리 뷰

PS

[Swift/Python] 백준_DFS와 BFS(1260)

희철 2023. 3. 9. 21:10

문제

 

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

 

풀이

 

스위프트로는 어렵지 않게 풀었는데, 파이썬으로는 도저히 혼자 할 수가 없어서 참고하면서 풀었음.

 

Swift

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = input[0]; let m = input[1]; let v = input[2]
var dic: [Int: [Int]] = [:]
var visited = Array(repeating: false, count: n + 1)
var result = ""

for i in 0..<m {
    let line = readLine()!.split(separator: " ").map { Int(String($0))! }
    if dic[line[0]] == nil {
        dic[line[0]] = [line[1]]
    } else {
        dic[line[0]]! = (dic[line[0]]! + [line[1]]).sorted(by: <)
    }
    if dic[line[1]] == nil {
        dic[line[1]] = [line[0]]
    } else {
        dic[line[1]]! = (dic[line[1]]! + [line[0]]).sorted(by: <)
    }
}
func dfs(_ num: Int) {
    visited[num] = true
    result += "\(num) "
    if dic[num] != nil {
        for i in dic[num]! {
            if !visited[i] {
                dfs(i)
            }
        }
    }
}
func bfs() {
    var queue = [v]
    while !queue.isEmpty {
        let cur = queue.removeFirst()
        if visited[cur] {
            continue
        }
        visited[cur] = true
        result += "\(cur) "
        if dic[cur] != nil {
            for num in dic[cur]! {
                if !visited[num] {
                    queue.append(num)
                }
            }
        }
    }
}
dfs(v)
print(result)
visited = Array(repeating: false, count: n + 1)
result = ""
bfs()
print(result)

 

Python

n, m, v = map(int, input().split())
dic = {i: [] for i in range(1,n+1)}
for i in range(m):
    a,b = map(int, input().split())
    dic[a].append(b)
    dic[b].append(a)
visitedDfs = [False] * (n + 1)
visitedBfs = [False] * (n + 1)
resultDfs = []
resultBfs = []
for i in dic.values():
    i.sort()
def dfs(num, visited):
    visited[num] = True
    resultDfs.append(num)
    for number in dic[num]:
        if not visited[number]:
            dfs(number, visited)
def bfs(num, visited):
    queue = [num]
    visited[num] = True
    while queue :
        cur = queue.pop(0)
        resultBfs.append(cur)
        for number in dic[cur]:
            if not visited[number] :
                queue.append(number)
                visited[number] = True
dfs(v,visitedDfs)
bfs(v,visitedBfs)
print(' '.join(map(str,resultDfs)))
print(' '.join(map(str,resultBfs)))

 

 

_____________________________________________________________________________________________________

 

 

파이썬 너무 어렵..

댓글
최근에 올라온 글
Total
Today
Yesterday