DFS
로 푸는 문제
map
에 key
는 출발 도시, value
는 도착 도시들이 들어간다. 방문했는지를 판단하기 위해 pair
로 정의한다.DFS
를 하는데, 현재 경로의 사이즈
가 티켓의 사이즈+1
일 경우 answer
에 값이 없으면 return 한다.map
의 value
값을 돌면서 m[cur][i].second==1
인 경우는 방문한 경우라 continue, 아니라면 방문 표시와 현재 경로 갱신 후 다시 재귀 호출한다.#include <string>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
vector<string> answer;
int ticketsSize;
void DFS(map<string, vector<pair<string, int>>> &m, string cur, vector<string> curPath)
{
if(curPath.size()==ticketsSize+1)
{
if(answer.empty()) answer = curPath;
return;
}
for (int i=0;i<m[cur].size();i++)
{
if (m[cur][i].second == 1) continue;
map<string, vector<pair<string, int>>> tmpMap = m;
tmpMap[cur][i].second = 1;
vector<string> tmpPath = curPath;
tmpPath.push_back(tmpMap[cur][i].first);
DFS(tmpMap,tmpMap[cur][i].first, tmpPath);
}
}
vector<string> solution(vector<vector<string>> tickets) {
map<string, vector<pair<string, int>>> m;
ticketsSize = tickets.size();
sort(tickets.begin(), tickets.end());
for (int i = 0; i < tickets.size(); i++)
{
m[tickets[i][0]].push_back({ tickets[i][1],0 });
}
DFS(m, "ICN",{"ICN"});
return answer;
}