PDA

View Full Version : [c]errore codice


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=... */

}