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