J'ai essayé de faire un programme C de croisement mais je ne sais pas comment faire l'appel pour la fonction du croisement et l'affichage du resultat!!

j'ai fait cette fonction de croisement, je veut utiliser les deux matrices populations : pop et child au lieu de pere1, pere2, e1 et e2, Reformuler le code de la fonction CroisementMPX: enlever tout code inutile ou redondant pour optimiser le code.

Le code après test se bloque dans certains cas, est ce qu'il y a une instruction (qui manque) dont la présence va empêcher ce plantage.

Explication S.V.P!!

Je veux aussi le programme principal qui:
-Utilise la fonction Selection pour choisir deux parents de la matrice pop.
-Affiche les deux pères.
-Applique la fonction CroisementMPX.
-Les deux enfants obtenus seront stockés dans la matrice child.
-Affiche les deux enfants ainsi que leurs couts.

(S.V.P toutes modification doivent etre commenté et merci )

Mon travail:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
 /************************* Croisement PMX ************************/
void croisementMPX(int *pere1, int *pere2, int *e1, int *e2, int taille)
{
    int pos1, pos2, i, j, aux;
    int *VerifE1 = new int[taille];
    int *VerifE2 = new int[taille];
    for (i = 0; i < taille; i++)
	VerifE1[i] = 0;
    for (j = 0; j < taille; j++)
	VerifE2[j] = 0;
////////////////Génération de deux positions//////////////// 
    pos1 = 2 + rand() % (taille - 5);
    pos2 = 2 + rand() % (taille - 5);
 
    if (pos1 == pos2)
	pos2 = pos1 + 2;
    if (pos1 > pos2) {
	aux = pos2;
	pos2 = pos1;
	pos1 = aux;
    }
///////////////////////////////////////////////////////////// 
    for (i = 0; i < taille; i++) {
	if (i >= pos1 && i < pos2) {
	    e1[i] = pere1[i];
	    VerifE1[pere1[i] - 1] = 1;
	} else
	    e1[i] = 0;
    }
    for (i = 0; i < taille; i++) {
	if (i < pos1) {
	    if (!VerifE1[pere2[i] - 1]) {
		e1[i] = pere2[i];
		VerifE1[pere2[i] - 1] = 1;
	    } else if (!VerifE1[pere1[i] - 1]) {
		e1[i] = pere1[i];
		VerifE1[pere1[i] - 1] = 1;
	    } else {
		for (j = pos1; j < pos2; j++)
		    if (!VerifE1[pere2[j] - 1]) {
			e1[i] = pere2[j];
			VerifE1[pere2[j] - 1] = 1;
		    }
	    }
	}
	if (i >= pos2) {
	    if (!VerifE1[pere2[i] - 1])
	    {
		e1[i] = pere2[i];
		VerifE1[pere2[i] - 1] = 1;
	    } else if (!VerifE1[pere1[i] - 1]) {
		e1[i] = pere1[i];
		VerifE1[pere1[i] - 1] = 1;
	    } else {
		for (j = pos1; j < pos2; j++) {
		    if (!VerifE1[pere2[j] - 1]) {
			e1[i] = pere2[j];
			VerifE1[pere2[j] - 1] = 1;
		    }
		}
	    }
	}
    }
// printf("n Enfant2n"); 
    for (i = 0; i < taille; i++) {
	if (i >= pos1 && i < pos2) {
	    e2[i] = pere2[i];
	    VerifE2[pere2[i] - 1] = 1;
	} else
	    e2[i] = 0;
    }
    for (i = 0; i < taille; i++) {
	if (i < pos1) {
	    if (!VerifE2[pere1[i] - 1]) {
		e2[i] = pere1[i];
		VerifE2[pere1[i] - 1] = 1;
	    } else if (!VerifE2[pere2[i] - 1]) {
		e2[i] = pere2[i];
		VerifE2[pere2[i] - 1] = 1;
	    }
 
	    else {
		for (j = pos1; j < pos2; j++) {
		    if (!VerifE2[pere1[j] - 1]) {
			e2[i] = pere1[j];
			VerifE2[pere1[j] - 1] = 1;
		    }
		}
	    }
	}
	if (i >= pos2) {
	    if (!VerifE2[pere1[i] - 1]) {
		e2[i] = pere1[i];
		VerifE2[pere1[i] - 1] = 1;
	    } else if (!VerifE2[pere2[i] - 1]) {
		e2[i] = pere2[i];
		VerifE2[pere2[i] - 1] = 1;
	    } else {
		for (j = pos1; j < pos2; j++) {
		    if (!VerifE2[pere1[j] - 1]) {
			e2[i] = pere1[j];
			VerifE2[pere1[j] - 1] = 1;
		    }
		}
	    }
	}
    }
    free(VerifE1);
    free(VerifE2);
}

MERCI D'AVANCE!!!