[プログラマー]旅行コース
10868 ワード
[プログラマー]旅行コース
1. リンクプログラマトラベルパス
2.解答
まず、次の2つの条件に注意してください.
2つ目の条件は、dfsを使用してナビゲーションを行う場合、深さが足りない(すべての都市にアクセスできない)場合は、再度ナビゲーションすることです.
深度が短いために再度ナビゲーションを行う場合は、ナビゲーションを再開したノードの後にあるすべてのノードをナビゲーション可能にする必要があります.
たとえば、上記のグラフで2-3-5-9-8にアクセスし、すべての都市にアクセスしたことがないと答えた場合は、3-5-9-8をすべてナビゲーション可能な状態に設定し、2で他のパスを選択できます.ex) 2-5-3, 2-5-9-6-4-1
このため,関数スタックを用いたdfsを用いた.
used[i] = true;
dfs_reculsive(tickets, used, path, count + 1);
if (false == path.back().empty())
return;
used[i] = false;
3.コード
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void dfs_reculsive(vector<vector<string>>& tickets, vector<bool>&used, vector<string>& path, int count)
{
for (int i = 0; i < tickets.size(); i++)
{
if (tickets[i][0] == path[count - 1])
{
if (true == used[i])
continue;
path[count] = tickets[i][1];
used[i] = true;
dfs_reculsive(tickets, used, path, count + 1);
if (false == path.back().empty())
return;
used[i] = false;
}
}
}
vector<string> dfs(vector<vector<string>>& tickets, const string start)
{
int size = tickets.size();
vector<bool> used(size, false);
vector<string> path(size + 1);
path[0] = start;
dfs_reculsive(tickets, used, path, 1);
return path;
}
vector<string> solution(vector<vector<string>> tickets)
{
sort(tickets.begin(), tickets.end());
vector<string> path = dfs(tickets, "ICN");
return path;
}
Reference
この問題について([プログラマー]旅行コース), 我々は、より多くの情報をここで見つけました https://velog.io/@morphine/프로그래머스-여행경로テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol