Ho due vettori.
Genero un numero random n tra 1 e (dim-2).
Scambio le porzioni dei vettori da n in poi.
Esempio:
Dim = 8
Valori ammissibili = da 0 a 14
Vincolo: i due vettori devono essere composti da elementi distinti.
v1: 2 4 5 7 9 10 13 14
v2: 4 6 8 10 11 12 13 14
Genero casualmente il taglio, ipotizziamo 4.
Applicando lo scambio ottengo:
v1: 2 4 5 7 11 12 13 14
v2: 4 6 8 10 9 10 13 14
Su v2 il numero 10 è ripetuto 2 volte...come fare per evitare questo???
Io ho realizzato del codice ma a volte mi crasha:
codice:
int dim = 8,i,j;
int v1[8], v2[8], appoggio[8];
taglio = (RANDOM((dim-2))+1);
/*copio la seconda parte di v1 nell'array di appoggio*/
for(i = taglio; i<dim; i++)
{
appoggio[i]=v1[i];
}
/*copio la seconda parte di v2 nel primo individuo*/
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])
{
/*prendo un altro random*/
doppione = RANDOM(15);
}
v1[i] = doppione;
}
}
/*copio la parte dell'array di appoggio nella seconda parte di v2*/
for(i=taglio;i<dim;i++)
{
/*copio un elemento di appoggio in v2*/
v2[i] = appoggio[i];
/*controllo che non vi siano doppioni*/
for(j=0;j<taglio;j++)
{
/*se trovo un doppione*/
if(v2[j] == appoggio[i])
{
/*prendo un altro nodo random*/
doppione = RANDOM(15);
}
v2[i] = doppione;
}
}
Aiutooooo!!!!!!!