Creation d'un graphe en java a partir d'une matrice d'adjacence
Résolu/Fermé
A voir également:
- Creation d'un graphe en java a partir d'une matrice d'adjacence
- Waptrick java football - Télécharger - Jeux vidéo
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Comment faire une recherche à partir d'une photo - Guide
- Creation compte gmail - Guide
1 réponse
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 23/01/2016 à 18:01
Modifié par KX le 23/01/2016 à 18:01
Bonjour,
Pourquoi tu fais une matrice d'adjacence de type
Ce devrait plutôt être un
De plus tu as "nbSommets" sommets, par exemple 5, mais avec ta double boucle
Et attention à la manière dont tu créées tes arc, si tu fais
La confiance n'exclut pas le contrôle
Pourquoi tu fais une matrice d'adjacence de type
double[][]?
Ce devrait plutôt être un
boolean[][]...
De plus tu as "nbSommets" sommets, par exemple 5, mais avec ta double boucle
g.addNode(id)tu en créés 25...
Et attention à la manière dont tu créées tes arc, si tu fais
addEdge(ID(i,j),ID(i,j),ID(i,j)), cela signifie que le nœud de départ est identique à celui d'arrivé puisque tout les deux valent ID(i,j)...
import org.graphstream.graph.Edge; import org.graphstream.graph.Graph; import org.graphstream.graph.Node; import org.graphstream.graph.implementations.SingleGraph; public class Graph { private static String getId(int nodeId) { return "Node " + nodeId; } private static String getId(int nodeId, int neighborId) { return "Edge " + nodeId + " -> " + neighborId; } public static SingleGraph createGraph(String graphId, boolean[][] adjacencyMatrix) { SingleGraph graph = new SingleGraph(graphId); for (int nodeId = 0; nodeId < adjacencyMatrix.length; nodeId++) graph.addNode(getId(nodeId)); for (int nodeId = 0; nodeId < adjacencyMatrix.length; nodeId++) for (int neighborId = 0; neighborId < adjacencyMatrix[nodeId].length; neighborId++) if (adjacencyMatrix[nodeId][neighborId]) graph.addEdge(getId(nodeId, neighborId), getId(nodeId), getId(neighborId), true); return graph; } public static void main(String[] args) { boolean[][] adjacencyMatrix = new boolean[5][5]; adjacencyMatrix[0][1] = true; // 0 -> 1 adjacencyMatrix[1][2] = true; // 1 -> 2 adjacencyMatrix[2][0] = true; // 2 -> 0 adjacencyMatrix[3][4] = true; // 3 -> 4 Graph graph = createGraph("Graph", adjacencyMatrix); for (Node node : graph.getNodeSet()) node.addAttribute("ui.label", node.getId()); for (Edge edge : graph.getEdgeSet()) edge.addAttribute("ui.label", edge.getId()); graph.display(); } }
La confiance n'exclut pas le contrôle
23 janv. 2016 à 18:18
Je suis débutante en java et j'ai créé ma matrice d'adjacence en double pour témoigner de la présence de phrases dans d'autre phrases
c'est a dire que si j'ai la matrice suivante:
S1 S2 S3 S4
S1 0 1 1 0
S2 0 0 0 0
S3 0 0 0 0
S4 0 0 0 0
c'est a dire S1 existe dans S2 est ainsi de suite....
est ce que je peux transformer cette matrice en booléen?
23 janv. 2016 à 18:22
if (adjacencyMatrix[nodeId][neighborId])==1
graph.addEdge(getId(nodeId, neighborId), getId(nodeId), getId(neighborId), true);
23 janv. 2016 à 19:49
Ce n'est pas la méthode de création de graphe que tu dois modifier pour t'adapter à ton contexte d'utilisation ("témoigner de la présence de phrases dans d'autre phrases") mais la matrice d'adjacence, quitte à avoir deux matrices : la première qui vient de ta recherche de phrase et que tu modifies pour avoir la deuxième en booléen qui génère le graphe.
Exemple :
Cette manière de concevoir les choses permet de généraliser le code, chaque méthode fait une chose de précis mais de manière la plus simple possible.
Comme ça si demain tu as un autre graphe à construire tu pourras réutiliser la même méthode telle quelle, sans avoir à la réadapter à un nouveau contexte d'utilisation.
24 janv. 2016 à 21:45
Je vous remercie enormément pour la solution que vous avez proposé. Je vais avec ce code la et je vous communiquerais le résultat.
Encore merci.
25 janv. 2016 à 14:09