[伯俊]1753最短距離py
16893 ワード
質問リンク:https://acmicpc.net/problem/1753
💡 アイデア
どのような方法で問題を解決したいかを書いてください.初期メソッドと最終メソッドに差がない場合、少なくとも1つのメソッドを使用することができる.
初期アクセス
V, E = map(int, input().split())
K = int(input())
# 충분히 큰 수로 배열 초기화
arr = [[int(1e9) for i in range(V+1)] for i in range(V+1)]
for i in range(E):
a, b, c = map(int, input().split())
arr[a][b] = c # 주어진 위치에 dist 값 넣어줌
# 자기 자신의 거리는 0으로 설정
for i in range(V+1):
arr[i][i] = 0
for i in range(1, V+1):
key = arr[K][i]
if key==0: # 자기 자신을 가리키는 경우 그냥 끝냄
print(key)
continue
for j in range(1, V+1): # 거쳐가는 길 확인
if arr[j][i] < key: # 거쳐가는 길을 기준으로 원래보다 크면 걍 지나침
temp = arr[K][j] + arr[j][i] # 거리 새로 초기화
key = min(temp, key)
print(key)
2 D配列にstart、end、distanceの内容を記録する
行ごとに開始点をチェック
自分を指すと出力して終了します
本人の道を通ることを基準に新たな探索を行う.
(1-3-2で通過したい場合は、3を基準にナビゲーション(カラムナビゲーション)を行います.
3入ってきた子供たちは誰ですか.
新しく探した道が以前見つけた道よりもっと悪いとしたら、そのまま過ぎてしまいます.
新しい探求の道で新しい距離を計算する
小さい値を最終値とし、以前の距離と新しい距離と比較します.
[白俊/python]1753-最短経路
最終アクセス
もし私がtupleの形で入れたら....ソートすると一番前の値に基づいて優先順位キューが生成されるそうです.だから真ん中...私が最初に入れた時はheappush(pq、(K,0)の形で入れて、heappush(pq,0,K)の形に変えて入れました.距離で並べ替えるから!
ここまでやったのに、、、ずっとタイムアウト...だから念のため!このpriorityqueueは間違っていますか?質問を検索したいのですが、、、、次の人のようにheapqに変えて解答します.フォーマットをpriorityqueueからheapqに変更しただけで、他は変更されていません.
最初はpythonでは昇順、cppでは降順!私が書いたとき、孟が本当に直してくれたと言った.
とにかく、だからPythonでは-処理する必要はありません......熱い...熱い...熱い・・・
📋 使用仕様
どんなアルゴリズムやテクニックで問題を解決したか教えてください.
👨🏻💻 👩💻 コード#コード#
from heapq import heappush, heappop
# 시간 줄이기 위해서...
import sys
input = sys.stdin.readline
V, E = map(int, input().split())
K = int(input())
arr = [[] for i in range(V+1)] # 입력받은 내용 저장할 배열
for i in range(E):
a, b, c = map(int, input().split())
arr[a].append((b, c)) # 인접 리스트 형식? a 자리에 (end vertex, distance) 형태로 저장
res = [int(1e9) for i in range(V+1)] # 큰 값으로 최종 계산한 거리 배열 초기화
pq = []
heappush(pq, (0, K)) # python에서의 최소힙에 (distance, vertex) 형태로 저장
res[K] = 0 # 나!는 최단거리가 0이지~
while pq:
dist, vertex = heappop(pq) # 힙에서 하나씩 빼오기
if res[vertex] < dist: # 만약 저장된 거리가 충분히 작으면 걍 넘김
continue
for next_vert, d in arr[vertex]: # 그 다음의 vertex와 거리 받아오기
next_dist = d + res[vertex] # 새로운 거리 계산. 이전에 저장된 내용에 새로운 거리 더해서 새로운 루트? 만들어냄
if next_dist < res[next_vert]: # 새로 만든 방법? 루트가 더 짧으면
res[next_vert] = next_dist # update 시켜주고
heappush(pq, (next_dist, next_vert)) # heap에 넣어줌
# 출력
for i in range(1, V+1):
if res[i] == int(1e9):
print("INF")
else:
print(res[i])
足りないところ
ソリューションに近づく前に残念な部分を書いてください.ソリューションを参考にして、修正箇所を書いてください.ソリューションへのリンクを書いてください.実装がスムーズであれば、省略できます.
学識
この問題で学んだことを書いてください.あるアルゴリズム,符号化方法,資料構造などを理解した.文法要素もいいです.あまり多くなければ省略できます.
いいえ、私の涙の採点状況を見てください.
最后に最初の和弦を作り直してもいいですか!!!でもだめです.
Reference
この問題について([伯俊]1753最短距離py), 我々は、より多くの情報をここで見つけました https://velog.io/@pseeej/baekjoon-1753テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol