Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dijkstra Algorithm #33

Closed
Taehyeon-Kim opened this issue Feb 3, 2023 · 3 comments
Closed

Dijkstra Algorithm #33

Taehyeon-Kim opened this issue Feb 3, 2023 · 3 comments

Comments

@Taehyeon-Kim
Copy link
Owner

Taehyeon-Kim commented Feb 3, 2023

다익스트라

  • 정점을 하나 선택하고 나머지 정점들로의 최단 거리를 모두 구함
  • cost가 음수일때는 사용 불가(벨만 포드 알고리즘 사용 바람)
  • 정점이 v개, 간선이 e개일때 O(ElgV) 시간 복잡도

기억해야할부분

  • dist 배열 만들기 및 초기화(INF로 초기화)
  • 최초 시작점 파악 후 초기화하기(시작점 0으로 초기화)
  • 최단 거리 갱신하는 부분은 Heap, PriorityQueue로 구현 -> 그래야 시간적인 면에서 이득

다익스트라 구현 소스 코드

let INF = Int.max

var q = Heap<Int>()
var distance = [Int](repeating: INF, count: graph.count)

distance[0] = 0
q.push(0)

while let cur = q.pop() {
    for dest in 0..<graph[cur].count {
        // 갈수없거나 자기자신이면 스킵
        if graph[cur][dest] == INF || graph[cur][dest] == 0 { continue }
        
        let curViaDest = distance[cur] + graph[cur][dest]
        if curViaDest < distance[dest] {
            distance[dest] = curViaDest
            q.push(dest)
        }
    }
}
  • 문자열 처리 까다로운 것보다 힘든 것은 Heap을 쌩구현해야한다는 것이다. STL 만들어줘;;;; (근데 이제 코드 다 외워서 없어도 됨)
  • 다익스트라 이해 및 구현 과정 자체는 어렵지 않다. 좀 더 익숙해질필요는 있어보인다.
@Taehyeon-Kim
Copy link
Owner Author

한 3문제 정도만 풀어도 다익스트라 기본 골격은 익숙해진다.

  • boj 1753 최단 경로
  • boj 1916 최소 비용
  • boj 1504 특정한 최단 경로

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant