Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 프로그래머스
- 트리의지름
- 두큐합같게만들기
- 최소스패닝트리
- 그래프탐색
- 도넛과막대그래프
- 파괴되지않은건물
- DP
- 사이클게임
- 벽부수고이동하기
- 섬연결하기
- 최단경로
- 구현
- 파이썬
- BFS
- DFS
- 프림알고리즘
- 자물쇠와열쇠
- 징검다리건너기
- 17404
- javascript
- RGB거리2
- 이모티콘할인행사
- [1차]캐시
- 알고리즘
- 다익스트라
- 거리두기확인하기
- 백준
- 큐
- 위상정렬
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘] 백준 1504 - 특정한 최단 경로 본문
문제
https://www.acmicpc.net/problem/1504
1504번: 특정한 최단 경로
첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존
www.acmicpc.net
풀이
어쩌다보니 오늘은 다 최단경로 알고리즘 문제... ! 이거는 예전에 풀었던 문제고, 아까 다익스트라를 풀었어서 바로 풀었다.
처음엔 간선이 양방향인데 단방향으로만 추가해줘서 틀렸습니다가 떴고,
두 번째엔 1e9 부분에서 -1을 출력해줘야 하는데 그 부분에서 ==과 >= 처리를 잘못해서 틀렸습니다를 몇 번 겪고난 후에 ^ __ ^ 정답을 띄울 수 있었다ㅎㅎ 마지막 틀렸습니다는 그냥 실험...겸 한 번 해봤다.
정답 코드
import heapq
import sys
input = sys.stdin.readline
n,e = map(int,input().split())
graph = [[] for _ in range(n+1)]
for _ in range(e):
a,b,c = map(int,input().split())
graph[a].append((b,c))
graph[b].append((a,c))
v1,v2 = map(int,input().split())
def djikstra(s,e):
distance = [1e9 for _ in range(n+1)]
q = []
heapq.heappush(q,(0,s))
distance[s] = 0
while q:
d,v = heapq.heappop(q)
if distance[v] < d:
continue
for v1,c1 in graph[v]:
if distance[v1] > distance[v] + c1:
distance[v1] = distance[v] + c1
heapq.heappush(q,(distance[v1],v1))
return distance[e]
tmp_result_1 = djikstra(1,v1) + djikstra(v1,v2) + djikstra(v2,n)
tmp_result_2 = djikstra(1,v2) + djikstra(v2,v1) + djikstra(v1,n)
result = min(tmp_result_1,tmp_result_2)
if result >= 1e9:
print(-1)
else:
print(result)
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 프로세스 (0) | 2024.01.03 |
---|---|
[알고리즘] 프로그래머스 - 두 큐 합 같게 만들기 (2) | 2024.01.03 |
[알고리즘] 백준 1238 - 파티 (0) | 2024.01.02 |
[알고리즘] 프로그래머스 - 기능개발 (0) | 2024.01.01 |
[알고리즘] 백준 1167 - 트리의 지름 (0) | 2023.12.31 |