|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
[c]errore codice
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: 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=... */ } Ultima modifica di mikael_c : 13-01-2014 alle 08:17. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:57.