2008-12-08 10 views
1

J'essaie de créer un graphe en Java qui aurait des noeuds différents. certains nœuds seraient connectés à d'autres et d'autres ne le seraient pas. Si elles sont connectées, alors une valeur booléenne pour ce nœud sera vraie et une autre variable contiendra la valeur du nœud auquel elle est connectée.codage des noeuds connectés dans le graphe

... des suggestions sur ce que vous pensez être la meilleure façon d'aborder cela?

Répondre

1

Créez une classe Node et attribuez-lui une variable d'instance de type Node. Initialisez-le à null - si ce noeud est connecté à un autre noeud, cette variable d'instance s'y référera; sinon, il restera nul.

Si le nœud peut être connecté à de nombreux nœuds (ce qui est assez commun pour les graphiques), utilisez un ArrayList pour stocker tous les nœuds auxquels ce nœud est connecté.

3

Les deux façons les plus courantes de représenter un graphique sont la matrice d'adjacence et les listes d'adjacence. Soit n le nombre de nœuds.

La matrice d'adjacence A est une matrice n x n de valeurs booléennes, telle que A (i, j) = 1 si les nœuds i et j sont connectés, et 0 s'ils ne le sont pas. Dans la représentation des listes d'adjacence pour chaque nœud, vous conservez une liste des nœuds auxquels il est connecté (adjacent à).

La question est maintenant ce que vous voulez faire avec le graphique. Si c'est quelque chose de simple, il peut être judicieux de rouler le vôtre. Si ce n'est pas le cas, vous voudrez peut-être faire un tour sur le Web pour trouver une bibliothèque Java pour gérer les graphiques. JGraphT a été mentionné.

Si vous souhaitez utiliser la matrice d'adjacence, vous pouvez facilement la représenter en Java sous la forme d'un tableau 2D de bool ou d'int. Vous devrez donner un index à chaque noeud. La façon la plus simple de faire cela est de garder vos objets Node dans un tableau, toujours dans le même ordre. Donc, vous auriez vraiment deux structures de données: un tableau de nœuds, qui sont des objets qui représentent tout ce que vos nœuds sont réellement, et la matrice d'adjacence, qui se réfère aux nœuds par leurs indices. Une fois que vous remplissez la matrice, si vous pouvez facilement trouver un nœud qui est connecté à la plupart des autres nœuds en additionnant les valeurs (0 et 1) dans toutes les colonnes (ou lignes), et trouver le maximum. J'espère que cela t'aides.

+0

pense qu'une matrice d'adjacence est ce que je veux. vouloir faire quelque chose de simple comme trouver des nœuds qui sont les plus connectés les uns aux autres. Pouvez-vous me donner une idée de comment faire une matrice d'adjacence de java pov ... où l'entrée serait une matrice nxn basée sur les noeuds qui seront créés – user41685

2

Il existe deux modèles standard pour stocker des graphiques. Celui que Tom décrit est le Adjacency List. L'autre serait un Adjacency Matrix autonome. Si vous tenez à l'efficacité, étudiez l'aspect parcellaire de votre situation (plus il y a d'arêtes, plus la version matricielle est performante). Si perf n'est pas un problème, utilisez ce que vous préférez programmer avec ...

Questions connexes