📄 test_ex_gene.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
void exchange_gene(int *chromosome_first, int *chromosome_second, int num_of_job)
{
int exchange_pos; // 交换随机点
int *derived_first, *derived_second; // 交换后的两个新子代的临时存放
int i, j, k;
int is_equal;
exchange_pos = rand() % num_of_job;
derived_first = (int*)malloc(sizeof(int)*num_of_job);
derived_second = (int*)malloc(sizeof(int)*num_of_job);
// 复制交换点前的基因
memcpy(derived_first, chromosome_first, sizeof(int)*(1+exchange_pos));
memcpy(derived_second, chromosome_second, sizeof(int)*(1+exchange_pos));
// 由两个亲本产生第一个子代
k = exchange_pos + 1;
for (i=0; i<num_of_job; ++i)
{
is_equal = 0;
for (j=0; j<=exchange_pos; ++j)
{
if (chromosome_second[i]==chromosome_first[j])
{
is_equal = 1;
break;
}
}
if (is_equal == 0)
{
derived_first[k] = chromosome_second[i];
++k;
}
}
// 由两个亲本产生第二个子代
k = exchange_pos + 1;
for (i=0; i<num_of_job; ++i)
{
is_equal = 0;
for (j=0; j<=exchange_pos; ++j)
{
if (chromosome_first[i]==chromosome_second[j])
{
is_equal = 1;
break;
}
}
if (is_equal == 0)
{
derived_second[k] = chromosome_first[i];
++k;
}
}
// 覆盖原始亲本
memcpy(chromosome_first, derived_first, sizeof(int)*num_of_job);
memcpy(chromosome_second, derived_second, sizeof(int)*num_of_job);
free(derived_first);
free(derived_second);
}
int main()
{
int i;
int p1[9] = {3,6,1,7,2,4,8,5,9};
int p2[9] = {9,1,5,6,7,4,3,2,8};
srand(time(0));
exchange_gene(p1,p2,9);
for (i=0; i<9; ++i)
{
printf("%d\t", p1[i]);
}
printf("\n");
for (i=0; i<9; ++i)
{
printf("%d\t", p2[i]);
}
printf("\n");
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -