Per passare dal numero binario, al vettore contenente interi che rappresentano gli indici ove si trovano gli 1, mi avvalgo di questo codice:
codice:
for(i=0, j=0;i<nodi;i++)
{
if(num1[i] == 1)
{
v1[j] = i;
j++;
}
}
Ho provato ad applicare quello che hai detto in modo che doppione, quando usato, abbia sempre un valore:
codice:
for(i=taglio;i<dim;i++)
{
/*copio un elemento di v2 in v1*/
v1[i] = v2[i];
/*controllo che non vi siano doppioni*/
for(j=0;j<taglio;j++)
{
/*se trovo un doppione*/
if(v1[j] == v2[i])
{
do
{
doppione = RANDOM(nodi);
}while(num1[doppione] == 1);
v1[i] = doppione;
}
}
}
Poi alla fine voglio costruire il nuovo numero binario, utilizzando questo codice:
codice:
/*resetto il numero*/
for(i=0;i<dim_binario;i++)
{
num[i]=0;
}
/*creo il nuovo numero binario*/
for(i=0;i<dim_binario ;i++)
{
num1[v1[i]] = 1;
}
Una volta ogni 5-6 esecuzioni, il programma mi va comunque in crash perchè
-mi perdo, non so come, qualche 1 (del vettore che contiene il numero binario)
-di coneguenza una posizione del vettore rimane senza essere valorizzata (contenendo 15687465168465)
-quando tento di accedere a num1[v1[i]]...tutto si ferma...
Non riesco a capire perchè!