Creation d'un graphe en java a partir d'une matrice d'adjacence
Résolu
Amira
-
Amira -
Amira -
Bonjour;
Je cherche a réer un graphe par utilisation de la librairie graphstream en java.
je dispose d'unje matrice d'adjacence que j'ai deja créé moi meme et je voudrais passer cette matrice en paramètre à une fonction pour créer et remplir le graphe mais j'y arrive pas.
J'ai deja essayé ça mais ça marche pas :
est ce que qlq peut m'aider svp c tres urgent.
Je cherche a réer un graphe par utilisation de la librairie graphstream en java.
je dispose d'unje matrice d'adjacence que j'ai deja créé moi meme et je voudrais passer cette matrice en paramètre à une fonction pour créer et remplir le graphe mais j'y arrive pas.
J'ai deja essayé ça mais ça marche pas :
public static SingleGraph CreateGraph(double mat[][],int nbSommets,String MyGraph){ SingleGraph g= new SingleGraph(MyGraph); for(int i=0;i<nbSommets;i++) for(int j=0;i<nbSommets;i++) { String id = ID(i,j); g.addNode(id); } for(int i=0;i<nbSommets;i++) { for(int j=0;j<nbSommets;j++) { if(mat[i][j]==1) // il y a un arc { g.addEdge(ID(i,j),ID(i,j),ID(i,j)); } } } return(g); }
est ce que qlq peut m'aider svp c tres urgent.
A voir également:
- Graphe java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
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
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?
if (adjacencyMatrix[nodeId][neighborId])==1
graph.addEdge(getId(nodeId, neighborId), getId(nodeId), getId(neighborId), true);
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.
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.