Salve devo creare un generatore di grafi random, ma ho riscontrato un problema:
Non riesco a creare le adiacenze random.Devo fare in modo da non avere una situazione del genere:
e l'unico modo che ho trovato per non farlo accader è mettere le adiacenze io ordine: 1-2-3-4-ecc quindi ho una cosa del genere:
[0,0](0,10,13.0)
[1,1](1,2,7.0)
[2,2](2,1,7.0) (2,3,9.0) (2,6,
[3,3](3,2,9.0) (3,4,1.0)
[4,4](4,3,1.0) (4,5,8.0)
[5,5](5,4,8.0) (5,6,6.0)
[6,6](6,5,6.0) (6,7,8.0) (6,2,
[7,7](7,6,8.0) (7,8,13.0)
[8,8](8,7,13.0) (8,9,4.0)
[9,9](9,8,4.0) (9,10,7.0)
[10,10](10,9,7.0) (10,0,13.0)
Io invece lo voglio random. Come posso fare?? Qui sotto metto il mio codice. Grazie!!
Codice PHP:
import Grafi.*;
public class GeneratoreGrafi{
public static void main (String[] args){
int num_nodi = (int) (Math.random() * 20);
if(num_nodi<2) num_nodi += 2; // Numero di nodi compreso tra 2 e 20
int nmax_archi = 0;
for(int i=0; i<num_nodi; i++){
nmax_archi += i;
}
int num_archi = (int) (Math.random() * nmax_archi);
if(num_archi < (num_nodi-1)) num_archi += (num_nodi-1); // Numero di archi compreso tra (num_nodi-1) e
// (num_nodi-1)+...+1
int cont = 0;
GrafoListeAdiacenza G = new GrafoListeAdiacenza();
for(int i=0; i<num_nodi; i++){
boolean terminale = true;
double number = Math.random();
if(number<=0.5){
terminale = true;
cont++;
}
else terminale = false;
G.insertNodo(i,terminale);
}
if(cont<2){
G.nodi[0].terminale = true;
G.nodi[1].terminale = true;
}
int archi_inseriti=0;
int[] a = new int[nmax_archi];
for(int i=0; i<num_nodi-1; i++){
int dist = (int) (Math.random() * 15); // Valore distanza compreso tra 0 e 15
if(dist==0) dist = 1;
double distanza = (double) dist;
G.insertArco(i+1,(i+2)%num_nodi,distanza);
G.insertArco((i+2)%num_nodi,i+1,distanza);
a[archi_inseriti*2]=i+1;
a[(archi_inseriti*2)+1]=(i+2)%num_nodi;
archi_inseriti++;
}
for(int i=0; i<num_archi-(num_nodi-1); i++){
int dist = (int) (Math.random() * 15); // Valore distanza compreso tra 0 e 15
if(dist==0) dist = 1;
double distanza = (double) dist;
int testa = (int) (Math.random() * (num_nodi-1));
int coda = (int) (Math.random() * (num_nodi-1));
if(testa==coda) coda = (coda+2)%num_nodi;
boolean cond = false;
int s=0;
while((i/2)<archi_inseriti && cond==false){
if((testa!=a[i]||coda!=a[i+1])&&(coda!=a[i]||testa!=a[i+1])){
cond=false;
}
else{
cond=true;
}
i += 2;
}
if(cond==false){
G.insertArco(testa,coda,distanza);
G.insertArco(coda,testa,distanza);
a[archi_inseriti*2]=testa;
a[(archi_inseriti*2)+1]=coda;
archi_inseriti++;
}
}
G.stampa();
}
}