Demande l'explication d'un code Java [Résolu]

Signaler
-
 Mus -
Bonjour,
Je suis débutant, je ne connaît pas Java.
J'ai trouvé sur le net un code Java que je dois l'améliorer pour pouvoir terminer mon TP.
Ce programme affiche les tous les chemins possibles entre deux points d'un graphe.
Ce que je veux savoir, c'est l'utilité de chacune des bibliothèques utilisées dans ce programme. Je sais qu'elles sont utilisées pour l'appel de fonctions prédéfinies, mais je ne sais pas exactement ce que fait chaque fonction.
Voilà donc le code source :
Les bibliothèques utilisées :
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;

Classe graph.java :
public class Graph {
private Map<String, LinkedHashSet<String>> map = new HashMap();

public void addEdge(String node1, String node2) {
LinkedHashSet<String> adjacent = map.get(node1);
if(adjacent==null) {
adjacent = new LinkedHashSet();
map.put(node1, adjacent);
}
adjacent.add(node2);
}

public void addTwoWayVertex(String node1, String node2) {
addEdge(node1, node2);
addEdge(node2, node1);
}

public boolean isConnected(String node1, String node2) {
Set adjacent = map.get(node1);
if(adjacent==null) {
return false;
}
return adjacent.contains(node2);
}

public LinkedList<String> adjacentNodes(String last) {
LinkedHashSet<String> adjacent = map.get(last);
if(adjacent==null) {
return new LinkedList();
}
return new LinkedList<String>(adjacent);
}
}


Classe Search.java :
public class Search {

private static final String START = "E";
private static final String END = "B";

public static void main(String[] args) {
// this graph is directional
Graph graph = new Graph();
graph.addEdge("A", "B");
graph.addEdge("A", "C");
graph.addEdge("B", "A");
graph.addEdge("B", "D");
graph.addEdge("B", "E"); // this is the only one-way connection
graph.addEdge("B", "F");
graph.addEdge("C", "A");
graph.addEdge("C", "E");
graph.addEdge("C", "F");
graph.addEdge("D", "B");
graph.addEdge("E", "C");
graph.addEdge("E", "F");
graph.addEdge("F", "B");
graph.addEdge("F", "C");
graph.addEdge("F", "E");
LinkedList<String> visited = new LinkedList();
visited.add(START);
new Search().breadthFirst(graph, visited);
}

private void breadthFirst(Graph graph, LinkedList<String> visited) {
LinkedList<String> nodes = graph.adjacentNodes(visited.getLast());
// examine adjacent nodes
for (String node : nodes) {
if (visited.contains(node)) {
continue;
}
if (node.equals(END)) {
visited.add(node);
printPath(visited);
visited.removeLast();
break;
}
}
// in breadth-first, recursion needs to come after visiting adjacent nodes
for (String node : nodes) {
if (visited.contains(node) || node.equals(END)) {
continue;
}
visited.addLast(node);
breadthFirst(graph, visited);
visited.removeLast();
}
}

private void printPath(LinkedList<String> visited) {
for (String node : visited) {
System.out.print(node);
System.out.print(" ");
}
System.out.println();
}
}


Je ne pourrai pas le transformer en c++ si je ne comprends pas la méthode utilisée.
Je souhaite que quelqu'un pourrait m'aider afin de terminer mon TP.
Cordialement.

4 réponses

Messages postés
16361
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Bonjour,

Si le but est de convertir en C++ c'est que tu connais le C++ a priori.
Du coup je ne vois pas le problème à comprendre le lien qu'il peut y avoir entre les classes Map, Set, ou List, alors qu'elles existent aussi en C++

http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html
http://www.cplusplus.com/reference/stl/
Merci pour votre réponse.
En fait je ne connait ces classes non plus en c++.
Mais je pourrai remplacer les fonctions prédéfinies dans ces classes par d'autres que je définirai si je comprends ce qu'elles font.
Messages postés
15060
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
94
Hello,

Ce sont des classes Conteneurs, te permettant de stocker des objets/valeurs suivant des critères spécifiques.

Doc de HashMap
Merci beaucoup.
Je vais suivre ce doc