회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
python 다익스트라 틀렸습니다
1916번 - 최소비용 구하기
ddrrff
2년 전
0
어느 부분에서 틀린 걸까요?
import sys import heapq N = int(sys.stdin.readline()) M = int(sys.stdin.readline()) adj = [[]for _ in range(N+1)] for _ in range(M): i, j, w = map(int, sys.stdin.readline().split()) adj[i].append([w, j]) start, end = map(int, sys.stdin.readline().split()) dist = [float("INF")] * (N+1) q = [] # when start -> start, w = 0, dist[start] = 0 heapq.heappush(q, [0, start]) dist[start] = 0 while q: nowCost, nowNum = heapq.heappop(q) for w, i in adj[nowNum]: if dist[nowNum] < w: continue if dist[i] > dist[nowNum] + w: dist[i] = dist[nowNum] + w heapq.heappush(q, [dist[i], i]) print(dist[end])
314programs
2년 전
1
고친 코드를 설명이랑 첨부했어요.
import sys import heapq N = int(sys.stdin.readline()) M = int(sys.stdin.readline()) adj = [[]for _ in range(N+1)] for _ in range(M): i, j, w = map(int, sys.stdin.readline().split()) #i 에서 j로 가는데 드는 비용 w adj[i].append([j, w]) start, end = map(int, sys.stdin.readline().split()) dist = [float("INF")] * (N+1) q = [[0, start]] dist[start] = 0 #시작은 거리가 0 while q: nowCost, nowNum = heapq.heappop(q) #등록돼 있는 거리가 nowCost(지금 거리) 보다 더 작은경우 continue를 써 넘어가요. #이거 안하면 시간초과가 나요... 모든 경로를 채크할려면 시간이 너무 많이 걸려요 if nowCost > dist[nowNum]: continue else: #지금 구한 거리에서 다른 경로들을 찾아요. #변수 이름이 했갈려 이름을 바꿈. for nextnum, nextcost in adj[nowNum]: #distance = 다음 숫자까지 거리 #지금 거리와 다음 거리를 더해서 구함 distance = nextcost + nowCost #기록된 거리보다 distance가 작을때 기록된 거리를 업대이트 하기 if dist[nextnum] > distance: dist[nextnum] = distance heapq.heappush(q, [distance, nextnum]) print(dist[end])
댓글을 작성하려면
로그인
해야 합니다.
ddrrff 2년 전
어느 부분에서 틀린 걸까요?