Demande l'explication d'un code Java

Résolu
Mus - Modifié par Mus le 21/12/2014 à 12:29
 Mus - 22 déc. 2014 à 10:07
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

KX
Messages postés
16563
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
1 juillet 2022
124
21 déc. 2014 à 16:25
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/
0
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.
0
BunoCS
Messages postés
15266
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2022
103
22 déc. 2014 à 09:25
Hello,

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

Doc de HashMap
0
Merci beaucoup.
Je vais suivre ce doc
0