mikael_c
07-01-2014, 09:15
nel codice sottostante c è un errore testandolo secondo me l'errore è nell: if(!flag){k=n} e ho messo un controllo del tipo if(nv==0){k=n;} overro serve per terminare il ciclo perchè non ha trovato valori ammissibili dopo dopo lo scambio di Adj[v][x] con Adj[v][nv].Secondo voi va bene? o avete altre soluzioni?
Codice:
for(k=0;k<n;k++)
{
if(k==0){
x=rand()%(n-k);
x=k+x;
}
if(k>0)
{
/*Inizializzazione Varibile v = Chr[k-1]*/
v = Chr[k-1];
/*Inizializzazione Varibile nv = v*/
nv = nAdj[v];
flag=1; /* se = 1 indica che non esiste un vertice adiacente ammissibile di v */
for(a=0;a<nAdj[v];a++)
{
/*Scelta casuale tra 0 e nAdj[v]-1*/
x = rand()%nv;
y=Adj[v][x];
/*Scambio Adj[v][x] con Adj[v][nv]*/
Adj[v][x]=Adj[v][nv-1];
Adj[v][nv-1]=y;
nv--;
if(nv==0){k=n;}
/* if(!flag){k=n;}*/
if(Chr1[y]>=k)
{x=Chr1[y];a=nAdj[v];flag=0;
/*printf("Trovato ammissibile:%d in posizione:%d di Chr\n\n",y,Chr1[y]);*/
}
/*Fine Ciclo for(a=0...) */
}
/* Fine if(k>0) */
}
if(k==0){
/* 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;
/* fine k==0 */
}
/* fine ciclo generazione casuale permutazione casuale for(k=... */
}
Codice:
for(k=0;k<n;k++)
{
if(k==0){
x=rand()%(n-k);
x=k+x;
}
if(k>0)
{
/*Inizializzazione Varibile v = Chr[k-1]*/
v = Chr[k-1];
/*Inizializzazione Varibile nv = v*/
nv = nAdj[v];
flag=1; /* se = 1 indica che non esiste un vertice adiacente ammissibile di v */
for(a=0;a<nAdj[v];a++)
{
/*Scelta casuale tra 0 e nAdj[v]-1*/
x = rand()%nv;
y=Adj[v][x];
/*Scambio Adj[v][x] con Adj[v][nv]*/
Adj[v][x]=Adj[v][nv-1];
Adj[v][nv-1]=y;
nv--;
if(nv==0){k=n;}
/* if(!flag){k=n;}*/
if(Chr1[y]>=k)
{x=Chr1[y];a=nAdj[v];flag=0;
/*printf("Trovato ammissibile:%d in posizione:%d di Chr\n\n",y,Chr1[y]);*/
}
/*Fine Ciclo for(a=0...) */
}
/* Fine if(k>0) */
}
if(k==0){
/* 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;
/* fine k==0 */
}
/* fine ciclo generazione casuale permutazione casuale for(k=... */
}