PDA

View Full Version : Unica Procedura in C


mikael_c
30-10-2013, 10:23
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:

/* 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;
}

}