[プログラマー]旅行コース


質問リンク


https://programmers.co.kr/learn/courses/30/lessons/43164

問題の説明

  • すべての航空券の旅行ルートの中でアルファベットの順序が最も速いルートは
  • を返します

    に答える

  • バックグラウンドトラッキング
  • 隣接リスト初期化
  • パスは
  • スタックに格納される
  • .
  • スタックのサイズが航空券数に達した場合、
  • を追加します.
  • sort高速アルファベット順
  • を返す

    コード#コード#

    def solution(tickets):
        adj_dict, route, answer = init(tickets)
        dfs(adj_dict, route, answer, len(tickets), 'ICN')
        answer.sort()
        return answer[0]
    
    
    def init(tickets):
        adj_dict = dict()
        for a, b in tickets:
            if a not in adj_dict:
                adj_dict[a] = []
            if b not in adj_dict:
                adj_dict[b] = []
            adj_dict[a].append([b, False])
        route = ['ICN']
        answer = []
        return adj_dict, route, answer
    
    
    def dfs(adj_dict, route, answer, total, curr):
        if len(route) == total + 1:
            answer.append(route[:])
            return
        for i in range(len(adj_dict[curr])):
            nextt, visited = adj_dict[curr][i]
            if not visited:
                adj_dict[curr][i][1] = True
                route.append(nextt)
                dfs(adj_dict, route, answer, total, nextt)
                adj_dict[curr][i][1] = False
                route.pop()