题意
给N个单词表示N个点,和N-1个单词对,表示可以走的路径,求字典序最小的总路径。
首先说下这么暴力DFS能过。暴力的我都不敢写= =
class Solution { public: vector<string> findItinerary(vector<vector<string> >& tickets) { map<string, vector<string> > mp; for (int i = 0; i < tickets.size(); i++) { string from = tickets[i][0]; string to = tickets[i][1]; if (mp.find(from) == mp.end()) { vector<string> v; v.push_back(to); mp[from] = v; } else { mp[from].push_back(to); } } for (map<string, vector<string> >::iterator iter = mp.begin(); iter != mp.end(); iter++) { sort(iter->second.begin(), iter->second.end()); } vector<string> res; string cur = "JFK"; res.push_back(cur); dfs(cur, mp, res, tickets.size()); return res; } bool dfs(string cur, map<string, vector<string> > &mp, vector<string> &res, int n) { if (res.size() == n + 1) return true; if (mp.find(cur) == mp.end()) return false; if (mp[cur].size() == 0) return false; for (int i = 0; i < mp[cur].size(); i++) { string nxt = mp[cur][i]; res.push_back(nxt); mp[cur].erase(mp[cur].begin() + i); if (dfs(nxt, mp, res, n)) return true; mp[cur].insert(mp[cur].begin() + i, nxt); res.pop_back(); } return false; } };