2014-05-25 1 views
-1

Mon graphique est représenté par une matrice d'adjacence et je veux construire une méthode qui peut ajouter une matrice [M x N] à un bord choisi. Qu'est-ce qui manque ou qui ne va pas dans mon code? Notez que le graphique est acyclique.Graphes en Java - Comment attacher une matrice à une arête?

public class Graph { 

/** Class Graph attributes */ 

    int [][] grafoo;  

/** Constructor */ 

public Graph (int dim) 
{ 
    grafoo = new int [dim][dim]; 

    int i=0, j;  
    while(i<dim) 
    { 
     j=0; 
     while(j<dim) 
     { 
      grafoo[i][j]=0; 
      j++; 
     } 
     i++; 
    } 
} 


/** Method add_edge */ //receives two nodes and places to the graph an edge from one node to another with a matrix MxN (for example M=4 and N=5). 


void add_edge(int i, int j) // my problem is at this part, representing an edge through a matrix instead of the number 1(usual to say there is a edge in a matrix of adjacency) 
{ 
      int[][] E = new int[M][N];  
      grafoo[i][j]= E;   
} 
+0

Votre graphique a-t-il pondéré les bords? – fabian

+0

Oui, il a, le poids est l'un des paramètres de la matrice que je dois mettre sur le bord. – user8885

+0

Vous devriez ** certainement ** considérer une représentation alternative pour cela. Je pense qu'il devrait y avoir au moins une sorte de classe 'Edge' ... – Marco13

Répondre

0

une matrice destinée à un bord ne peut pas être enregistrée dans le champ 2 dimenrional grafoo (au moins pas d'une manière saine). Un tableau 2D de matrices est nécessaire pour cela, c'est-à-dire int[][][][] puisque selon un commentaire, il semble possible d'obtenir le poids du bord de la matrice.

S'il est impossible d'obtenir le poids de la matrice, une classe qui a deux domaines devrait être à volontairement introduites:

class Edge { 
    int[][] matrix; 
    int weight; 
    // TODO: non-default-costructor(s)? ... 
    // TODO: change visibities/add final modifier if appropriate 
} 

Le type de grafoo doit ensuite être changée à Edge[][].


Encore une chose: tableaux nouvellement créés sont initialisés avec les valeurs initiales (voir jls-4.12.5) automatiquement, c.-à-0 pour int, null pour les types de référence, ...

Par conséquent, les boucles tout en devrait être supprimé ou au moins mis en commentaires, si cela aide à comprendre, ce qui se passe.

new int[dim][dim][][] créerait un tableau 2D contenant seulement null valeurs (en attente d'être rempli de int[][] s)

également Integer.MIN_VALUEpeut être une meilleure représentation d'un bord non existant que 0 (en supposant que les boucles tandis que sont là pour initialiser tous les bords pour être inexistant).

+0

au lieu de int [] [] [] [], est-il possible de définir le grafoo comme Object [] []? – user8885

+0

@ user8885 bien sûr, il est possible, ajouté du code à la réponse. Cependant, utiliser 'Object [] []' serait une mauvaise pratique, car vous devrez alors convertir les valeurs et ainsi éviter de profiter de la vérification de type du compilateur et des IDE. Si vous avez même pensé à placer des objets de types différents dans le tableau (ie 'Integer' ** et **' int [] [] '): C'est une mauvaise idée dans la plupart des cas, puisque vous devriez alors vérifier les types + lancer chaque fois que vous utilisez une valeur. – fabian

Questions connexes