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:
Aiutooooo!!!!!!!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; } }

Rispondi quotando