Buongiorno.
devo implementare in Java un applicazione che crei grafi pesati non direzionati random.
Ho pensato di fare in questo modo.
L'utente in input invia il numero N di nodi dell'albero, che deve essere maggiore o uguale a 4.
Creo a questo punto una matrice NxN, che mi servirà per segnare gli archi che connettono i nodi.
A questo punto, mi blocco un po'.
Per ogni nodo, scorro tutti gli altri, e con la funzione Math Random creo al 50% un arco tra di essi e sempre con Math gli attribuisco un valore casuale da 1 a 10.
NOn ho problemi in questo, ma potrebbe capitare un'occorrenza come questa.
A-------B-------C
D-------E
cioè il caso in cui il grafo non sia completamente connesso. E non voglio accada questo...
Oppure un'occorrenza in cui un nodo non è connesso a nessun'altro.
Questa seconda occorrenza è rarissima e si può risolvere facilmente vedendo a giochi fatti la matrice creata.
Ma il primo problema proprio non so come risolverlo.
Posto un po' di codice...
Praticamente assegno un 1 o uno 0 ad ogni possibile coppia riga-colonna, con l'esclusione del caso in cui un nodo sia collegato a se stesso.public Integer[][] matrix_generator ( int n ) {
this.matrix = new Integer[n][n];
for (int righe = 0; righe < n ; righe ++){
for (int colonne = 0; colonne < n ; colonne ++){
this.matrix[righe][colonne] = (int)(2*Math.random());
this.matrix[colonne][righe] = this.matrix[righe][colonne];
if (colonne == righe){
this.matrix[righe][colonne] = 0;
this.matrix[colonne][righe] = 0;
}
}
}
return this.matrix;
}
Ora, il problema di un nodo non collegato a nulla è facilmente risolvibile: basta controllare che una riga (e quindi la colonna adiacente) non sia tutta composta di 0.
Ma capire dalla matrice se un sottografo non è connesso è più difficile.
QUalcuno ha suggerimenti a proposito?