[アルゴリズム解答]旅行コース
8015 ワード
問題の説明
与えられたすべての航空券を利用して旅行ルートを作りたいです.いつもICN空港から
航空券情報を含む2次元配列航空券をパラメータとして指定する場合は、アクセスした空港経路をレイアウトに入れて返します.
せいげんじょうけん
I/O例
I/O例説明
例1
ICN JFK HND IAD]順にアクセス可能
例2
ICN、SFO、ATL、ICN、ATL、SFOの順でアクセスできますが、[ICN、ATL、ICN、SFO、ATL、SFO]のアルファベット順でリードしています.
に答える
import copy
def _search(left_tickets, ticket_history, result):
for ticket in left_tickets:
if ticket_history[-1][1] == ticket[0]:
if len(left_tickets) > 1:
added_history = copy.deepcopy(ticket_history)
added_history.append(ticket)
_search(copy.deepcopy([x for x in left_tickets if x is not ticket])
, added_history
, result)
elif len(left_tickets) == 1:
ticket_history.append(ticket)
result.append(ticket_history)
def solution(tickets):
answer = []
result = []
for ticket in tickets:
if ticket[0] == 'ICN':
left_tickets = copy.deepcopy([x for x in tickets if x is not ticket])
_search(left_tickets, [ticket], result)
for seq in result:
path = []
for index, ticket in enumerate(seq):
if index == 0:
path.extend(ticket)
else:
path.append(ticket[1])
answer.append(path)
answer = sorted(answer, key = lambda x: x)
return answer[0]
_search(left_tickets, ticket_history, result)
は、solution(tickets)
の内部から呼び出される関数である.深度優先検索で可能なすべてのパスを見つけます.因子は以下の通りである.left tickets:未使用のチケットリスト
ticket history:これまでのパス
≪結果|Results|ldap≫:すべてのチケットが使用されている場合、可能なすべてのパスのリストが格納されます.
solution
のうち、「ICN」からのチケットのみを起点として_search
を呼ぶ._search
では、最後のパスの到着点と残りのチケットの出発地を確認し、2つの位置が同じであればticket historyとleft ticketsにそれぞれ追加、削除し、再び_search
を呼び出す.この場合、残りのチケットがチケットのみの場合、チケットhistoryにチケットを追加し、resultにチケットhistoryを追加します.上記の手順でresultに可能なすべてのパスを追加します._search
の再帰呼び出しがすべて終了した後、結果をsolution
で確認し、一連のパスに変換する.次に、アルファベット順に並べ替えて、最初の要素を返します.Reference
この問題について([アルゴリズム解答]旅行コース), 我々は、より多くの情報をここで見つけました https://velog.io/@byunji_jump/알고리즘-여행경로テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol