[1916] 최소비용구하기 (다익스트라)

2023. 4. 18. 01:07·Coding Test/Graph
728x90
 

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net

 

분석

 

[1753번] 최단경로 구하기 (다익스트라, 우선순위큐, 힙)

다익스트라 음수간선 X S 시작점부터 다른 모든 노드로 가는 최단거리 구하는 알고리즘 기출 : 음수간선이 없는데 시작점이 있고 최단거리 구하는 문제 원리 최단거리를 구할 노드에서 시작하여

karla.tistory.com

 

그래프 최단거리 알고리즘 정리 및 비교 (다익스트라, 벨만-포드, 플로이드-워셜)

다익스트라 벨만-포드 플로이드-워셜 시작 노드 (시작점) O O X (모든 노드) 음수 간선 X O O 시간 복잡도 O(ElogV) O(EV) O(V³) 1. 다익스트라 출발 노드와 모든 노드 간의 최단 거리 탐색 음수간선 X S 시

karla.tistory.com

 

풀이

import sys
from queue import PriorityQueue
input=sys.stdin.readline

# 도시개수
n=int(input())
#버스개수
m=int(input())
# 최단거리 리스트
d=[sys.maxsize] * (n+1)
# 방문 배열
visited=[False] * (n+1)

# 인접 리스트
graph=[[] for _ in range(n+1)]
for i in range(m):
    # 출발도시, 도착도시, 버스비용
    u,v,w=map(int, input().split())
    graph[u].append((v,w))

start,end=map(int, input().split())


# 다익스트라
def dijkstra(s,e):
    q=PriorityQueue()

    # 출발 노드는 우선순위 큐에 넣고 시작
    q.put((0,s)) # s를 시작점으로 설정
    # 우선순위에 데이터를 최단거리 노드순으로 삽입
    # 거리 리스트에 출발 노드의 값을 0으로 설정
    d[s]=0

    while q.qsize() > 0:

        # 우선순위 큐에서 노드 가져오기
        nowNode = q.get()
        # print(nowNode)
        now=nowNode[1]

        # 현재 선택 노드 방문 여부 확인
        if visited[now]:
            continue
        # 현재 노드 방문 처리
        visited[now] = True

        for i in graph[now]:
            next = i[0]
            value = i[1]
            # 타깃노드 방문전, 타깃노드 최단거리 > 현재선택노드 최단거리+비용
            if not visited[next] and d[next]> d[now]+value:
                # 타깃노드 최단거리 업데이트
                d[next]=d[now]+value
                # 우선순위 큐에 타깃노드 추가
                q.put((d[next], next))

    # 종료 인덱스 최종거리 리턴
    return d[e]

print(dijkstra(start,end))

 

더보기
 

[1854번] k번째 최단경로 구하기

1854번: K번째 최단경로 찾기 첫째 줄에 n, m, k가 주어진다. (1 ≤ n ≤ 1000, 0 ≤ m ≤ 2000000, 1 ≤ k ≤ 100) n과 m은 각각 김 조교가 여행을 고려하고 있는 도시들의 개수와, 도시 간에 존재하는 도로의

karla.tistory.com

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/Graph' 카테고리의 다른 글
  • [1948] 임계경로(위상정렬, 에지 뒤집기)
  • [2252] 줄 세우기(위상정렬)
  • [1043] 거짓말 (유니온파인드)
  • [1976] 여행 가자(여행 계획, 유니온 파인드)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DFS
    구현
    재귀
    힙
    큐
    트리
    알고리즘
    월간코드챌린지
    그리디
    파이썬
    그래프
    구간합
    자료구조
    플로이드워셜
    최단거리
    조합
    LIS
    DP
    스택
    BFS
    덱
    최소신장트리
    이분탐색
    동적계획법
    백준
    최대공약수
    다익스트라
    Algorithm
    프로그래머스
    정렬
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[1916] 최소비용구하기 (다익스트라)
상단으로

티스토리툴바