. http://en.wikipedia.org/wiki/Pr%C3%BCfer_sequence, , , . , arraylist k - .
public static HashMap<Integer, HashSet<Integer>> toGraph(ArrayList<Integer> k) {
HashMap<Integer, HashSet<Integer>> hm = new HashMap<Integer, HashSet<Integer>>();
for(int i=1; i<=k.size()+1; i++){
hm.put(i, new HashSet<Integer>());
}
int degree[] = new int[k.size()+1];
for(int i=0; i<degree.length; i++){
degree[i]=1;
}
for(int a : k){
degree[a-1]++;
}
for(int n : k){
for(int j : hm.keySet()){
if(degree[j-1]==1){
hm.get(j).add(n);
hm.get(n).add(j);
degree[n-1]--;
degree[j-1]--;
break;
}
}
}
return hm;
}
In some cases, one vertex is inappropriate on the returned adjacency list. FE at 16, 1, 19, 9, 19, 18, 17, 10, 13, 13, 4, 19, 5, 19, 18, 4, 19, 19 vertex 3 must have edges up to 17, 19, 13, but in the mine, it has edges up to 16, 19, 13. Can someone detect a flaw?
source
share