|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
Codice in C
Mi serve un aiuto nello scrivere il seguente pezzo di codice:
se k>0, le due ultime istruzioni vanno sostituite da un ciclo che seleziona in ordine casuale tutti gli adiacenti di Chr[k-1]; il primo adiacente casuale che non è già in Chr[0:k-1] viene preso in considerazione per essere scambiato in Chr[] con Chr[k]; se non trovi alcun adiacente di Chr[k-1] non già in Chr[0:k-1], allora passa a generare una prossima psoluzione(permutazione) casuale */ il tutto si riferisce al seguente pezzo di codice: Codice:
/* generazione casuale di al più ThSol soluzioni (permutazioni) per l'istanza Gg-esima */ for(c=0;c<ThSol;c++) { /* Inizializza il numero di rami della soluzione a 0 */ Ftns=0; /* costruisce una soluzione (permutazione) casuale */ for(k=0;k<n;k++) {x=rand()%(n-k); x=k+x; /* scambia l'elemento k-esimo con l'x-esimo in Chr[] */ y=Chr[k]; Chr[k]=Chr[x]; Chr[x]=y; Chr1[Chr[k]]=x; /* aggiorna il numero di rami della soluzione se k > 0 */ if(k>0) Ftns=Ftns+m[Chr[k-1]][Chr[k]]; /* fine ciclo generazione casuale permutazione casuale for(k=... */ } /* verica che Chr[] sia una permutazione */ somma2=0; for(i=0;i<n;i++) somma2=somma2+Chr[i]; if(somma2!=somma) {printf("Errore somma2: %d !=((n*(n-1))/2): %d \n\n",somma2,somma); stampaVett(); } /* aggiorna il numero di rami della soluzione */ Ftns=Ftns+m[Chr[n-1]][Chr[0]]; /* stampa soluzione trovata ed il suo numero di rami */ /* printf("Numero rami: %d in soluzione: ",Ftns); stampaVett(); */ /* se la soluzione è un ciclo setta Succ e termina la generazione casuale delle soluzioni */ if(Ftns==n) { Succ=1; c=ThSol; } } Ultima modifica di mikael_c : 06-11-2013 alle 15:37. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:33.