プログラマ深度/幅優先ナビゲーション(DFS/BFS)-トラベルパス



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

問題の説明


与えられたすべての航空券を利用して旅行ルートを作りたいです.いつも「ICN」空港から
航空券情報を含む2次元配列航空券をパラメータとして指定する場合は、アクセスした空港経路をレイアウトに入れて返します.

せいげんじょうけん

  • すべての空港はアルファベットの大文字の3文字で構成されています.
  • 所定の空港数は3つ以上10000個以下である.
  • 切符の各行[a,b]は、a空港からb空港までの航空券があることを示す.
  • の航空券はすべて使用します.
  • 可能なパスが2つ以上ある場合は、アルファベット順にリードするパスを返します.
  • すべての都市へのアクセスは許可されていません.
  • に答える

    def dfs(tickets, answer, history, visit, frm, depth):
        history += frm + ','
        if depth == len(tickets):
            answer.append(history[:])
        for i in range(len(tickets)):
            if tickets[i][0] == frm and visit[i] == 0:
                visit[i] = 1
                dfs(tickets, answer, history[:], visit, tickets[i][1], depth+1)
                visit[i] = 0
    
    
    def solution(tickets):
        answer = []
        visit = [0]*len(tickets)
        dfs(tickets, answer, '', visit, "ICN", 0)
        answer.sort()
        answer = answer[0].split(',')[:-1]
        return answer
    DFSで解読した.
  • 票の数でアクセスリストを作成し、
  • 入力
  • from,
  • 履歴にfromを追加만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.この条件のためhistoryに文字列を追加しました.
  • の深さが票数に等しいまでdfsを回します.
  • きっぷの出発地と到着していないきっぷは
  • 回のアクセスを確認し、深さ1を増やし、dfsからチケットの到着地
  • まで再探索する.
  • この時点でアクセスを0に戻します.
  • また歴史をめくる時は歴史[:]のようにコピー
  • をめくる
    リストされた履歴リストはソートされ、一番前のリストのみがリストに変換されて返されます.