import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
private static int countPaths(List<Integer> shops, List<List<Integer>> roads) {
//Build map
HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
for (int i = 0; i < shops.size(); i++)
map.put(i, new ArrayList<>());
for (List<Integer> road : roads) {
map.get(road.get(0)).add(road.get(1));
System.err.println("Ajout a la cle " + road.get(0) + " de la valeur " + road.get(1));
map.get(road.get(1)).add(road.get(0));
System.err.println("Ajout a la cle " + road.get(1) + " de la valeur " + road.get(0));
}
//Read map
for (Map.Entry<Integer, ArrayList<Integer>> entry : map.entrySet()) {
System.err.println("clé : " + entry.getKey() + ", list: " + entry.getValue());
}
//Calcul des chemins valides
int cpt = 0;
for (int i = 0; i < shops.size(); i++) {
cpt += dfs(map, shops, i, new boolean[shops.size()], new HashSet<>(), new ArrayList<>());
}
return cpt;
}
private static int dfs(Map<Integer, ArrayList<Integer>> map, List<Integer> shops, int current, boolean[] visited, Set<Integer> shopTypes, List<Integer> path) {
if (shopTypes.contains(shops.get(current)))
return 0;
shopTypes.add(shops.get(current));
path.add(current);
visited[current] = true;
System.err.println("Path : " + path);
int validPaths = 0;
if (shopTypes.size() == 4) {
validPaths = 1;
System.err.println("VALID Path : " + path);
}
else {
for (int i : map.get(current)) {
if (!visited[i])
validPaths += dfs(map, shops, i, visited, shopTypes, path);
}
}
visited[current] = false;
shopTypes.remove(shops.get(current));
path.remove(path.size() - 1);
return validPaths;
}
public static void main(String[] args) {
List<Integer> shops = Arrays.asList(1, 0, 3, 2, 2);
List<List<Integer>> roads = Arrays.asList(
Arrays.asList(0, 1),
Arrays.asList(1, 2),
Arrays.asList(1, 4),
Arrays.asList(2, 3),
Arrays.asList(2, 4));
System.out.println(countPaths(shops, roads));
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: