int* min_path;
//初始化种群
void init()
{
int *a = new int[num];
for (int i = 0; i= 0; j--)
{
int n = rand() % (j + 1);//产出的数是0-j,保证交换的后面
的数不会再被交换
swap(a[j], a[n]);//保证a里面全是0-(num-1)的数,无重复
的数,只是顺序颠倒
city[i][j] = a[j];
}
}
delete[]a;
dis = new int[population];
fitness = new double[population];
min_path = new int[num];
}
//计算适应度
void compute()
{
//cout << "do compute now. " << endl;
double total = 0;
for (int i = 0; i
}
}
}
}
}
int getMinDis()
{
int result = dis[0];
int index = 0;
for (int i = 1; i dis[i])
{
result = dis[i];
index = i;
}
return index;
int getMaxDis()
{
int result = dis[0];
int index = 0;
for (int i = 1; i
min_dis = dis[current_min_index];
for (int i = 0; i < num; i++)
{
min_path[i] =
city[current_min_index][i];
}
//cout << "current min dis is: " << min_dis << endl;
for (int i = 0; i
temp[i - p1] = src[i];
}
int j = (p2 + 1) % num;
for (int i = 1; i <= num; i++)
{
int index = (i + p2) % num;
if (!isExist(dst[index], temp, len))
{
dst[j] = dst[index];
j = (j + 1) % num;
}
}
for (int i = p1; i <= p2; i++)
{
dst[i] = src[i];
}
delete[]temp;
}
//交叉,采用次序交叉算法
void cross()
{
//cout << "do cross now. " << endl;
for (int k = 0; k
int* b1 = new int[num];
int* b2 = new int[num];
for (int i = 0; ip2)
{
swap(p1, p2);
}
}
//cout << "choose pos " << p1 << " " << p2 << endl;
//开始交叉
convert(p1, p2, a1, b1);
convert(p1, p2, a2, b2);
for (int i = 0; i
city[k][i] = a1[i];
city[k + 1][i] = a2[i];
}
}
delete[]a1;
delete[]a2;
delete[]b1;
delete[]b2;
}
}
//变异,采用对换操作进行变异
void morphis()
{
}
}
}
int getdis()
{
//compute();
int result = dis[0];
int index = 0;
//cout << "do morphis now. " << endl;
for (int i = 0; i