https://leetcode-cn.com/problems/reconstruct-itinerary/
[bug]
class Solution {
Map<String, List<String>> adj = new HashMap<>();
public List<String> findItinerary(List<List<String>> tickets) {
int n = tickets.size();
for(int i=0;i<n;i++){
List<String> ticket = tickets.remove(0);
tickets.add(ticket);
String src = ticket.get(0);
String dst = ticket.get(1);
if(!adj.containsKey(src)){
adj.put(src, new ArrayList<>());
}
adj.get(src).add(dst);
}
int maxLv = n;
String sta = tickets.get(0).get(0);
List path = new ArrayList<>();
List ret = new ArrayList<>();
dfs(sta, 0, path, ret, maxLv);
return ret;
}
void dfs(String cur, int lv, List<String> path, List ret, int maxLv){
lv++;
path.add(cur);
if(lv==maxLv){
ret.addAll(path);
return;
}
if(!adj.containsKey(cur)){
adj.put(cur, new ArrayList());
}
for(String neigh: adj.get(cur)){
dfs(neigh, lv+1, path, ret, maxLv);
if(ret.size()>0){
path.remove(path.size()-1);
return;
}
}
path.remove(path.size()-1);
}
}
[bug]
class Solution {
Map<String, List<String>> adj = new HashMap<>();
public List<String> findItinerary(List<List<String>> tickets) {
int n = tickets.size();
for(int i=0;i<n;i++){
List<String> ticket = tickets.remove(0);
tickets.add(ticket);
String src = ticket.get(0);
String dst = ticket.get(1);
if(!adj.containsKey(src)){
adj.put(src, new ArrayList<>());
}
adj.get(src).add(dst);
}
int maxLv = n;
String sta = tickets.get(0).get(0);
List path = new ArrayList<>();
List ret = new ArrayList<>();
dfs(sta, 0, path, ret, maxLv);
return ret;
}
void dfs(String cur, int lv, List<String> path, List ret, int maxLv){
lv++;
path.add(cur);
if(lv==maxLv){
ret = new ArrayList(path);
return;
}
if(!adj.containsKey(cur)){
adj.put(cur, new ArrayList());
}
for(String neigh: adj.get(cur)){
dfs(neigh, lv+1, path, ret, maxLv);
}
path.remove(path.size()-1);
}
}
[bug]
class Solution {
Map<String, List<String>> adj = new HashMap<>();
public List<String> findItinerary(List<List<String>> tickets) {
int n = tickets.size();
for(int i=0;i<n;i++){
List<String> ticket = tickets.remove(0);
tickets.add(ticket);
String src = ticket.get(0);
String dst = ticket.get(1);
if(!adj.containsKey(src)){
adj.put(src, new ArrayList<>());
}
adj.get(src).add(dst);
}
int maxLv = n;
String sta = tickets.get(0).get(0);
List path = new ArrayList<>();
dfs(sta, 0, path, maxLv);
return path;
}
void dfs(String cur, int lv, List<String> path, int maxLv){
lv++;
if(lv==maxLv){
path.add(cur);
return;
}
path.add(cur);
for(String neigh: adj.get(cur)){
dfs(neigh, lv+1, path, maxLv);
}
path.remove(path.size()-1);
lv--;
}
}