728x90
https://www.acmicpc.net/problem/9372
9372번: 상근이의 여행
첫 번째 줄에는 테스트 케이스의 수 T(T ≤ 100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 ≤ N ≤ 1 000)과 비행기의 종류 M(1 ≤ M ≤ 10 000) 가
www.acmicpc.net
모든 정점이 연결되어 있기 때문에 한 지점에서 시작해도 모든 경로를 갈 수 있다. 그래서 나는 DFS로 1에서 시작해서 쭉 이동하도록 했다. 그리고 그 경로(edge)의 개수를 세면 된다. 좀 보니까 답이 (정점 개수 - 1) 인 것을 알 수 있다!ㅋㅋㅋ 하지만 DFS로 탐색해 봤다~
import Foundation
//input
let t = Int(readLine()!)!
var cnt = 0
func dfs(_ now: Int, _ visited: inout [Bool], _ flights: [[Int]]) {
visited[now] = true
for flight in flights[now] {
if visited[flight] { continue }
cnt += 1
dfs(flight, &visited, flights)
}
}
func solution() {
let nm = readLine()!.split(separator: " ").map{ Int(String($0))! }
let (n, m) = (nm[0], nm[1])
var flights = [[Int]](repeating: [], count: n+1)
var visited = [Bool](repeating: false, count: n+1)
for _ in 0..<m {
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
flights[input[0]].append(input[1])
flights[input[1]].append(input[0])
}
dfs(1, &visited, flights)
print(cnt)
cnt = 0
}
for _ in 0..<t {
solution()
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Swift] 9935번: 문자열 폭발 (0) | 2023.03.14 |
---|---|
[백준/Swift] 1141번: 접두사 (0) | 2023.03.13 |
[백준/Swift] 12100번: 2048 (easy) (1) | 2023.03.12 |
[백준/Swift] 10844번: 쉬운 계단 수 (0) | 2023.03.12 |
[백준/Swift] 2193번: 이친수 (0) | 2023.03.12 |