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<2num_nodi += 2;  // Numero di nodi compreso tra 2 e 20
        
        
int nmax_archi 0;
        for(
int i=0i<num_nodii++){
            
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=0i<num_nodii++){
            
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[] = new int[nmax_archi];
        for(
int i=0i<num_nodi-1i++){
            
int dist = (int) (Math.random() * 15); // Valore distanza compreso tra 0 e 15
            
if(dist==0dist 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=0i<num_archi-(num_nodi-1); i++){
            
int dist = (int) (Math.random() * 15); // Valore distanza compreso tra 0 e 15
            
if(dist==0dist 1;  
            
double distanza = (double) dist;
            
int testa = (int) (Math.random() * (num_nodi-1));
            
int coda = (int) (Math.random() * (num_nodi-1));
            if(
testa==codacoda = (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;
                }
                
+= 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();                    
    }