📄 maintainsequence.cpp
字号:
// MaintainSequence.cpp: implementation of the MaintainSequence class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MaintainSequence.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
MaintainSequence::MaintainSequence(int d,int l,AdaptabilityTSP * a,Rand * rand)
{
dimension=d;
length=l;
adapt=a;
r=rand;
}
void MaintainSequence::Maintain(Popular * p)
{
double * seq=p->GetPop();
int t=r->randint((int)(dimension-length));
for(int i=t;i<t+length;i++)
{
for(int j=0;j<i;j++)
if(adapt->GetDistance((int)seq[j],(int)seq[j+1])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[j+1],(int)seq[(i+1)%dimension]))
for(int k=0;k<(i-j)/2;k++)
{
double temp=seq[i-k];
seq[i-k]=seq[j+k+1];
seq[j+k+1]=temp;
}
for(j=j+1;j<dimension;j++)
if(adapt->GetDistance((int)seq[j],(int)seq[(j+1)%dimension])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[(j+1)%dimension],(int)seq[(i+1)%dimension]))
for(int k=0;k<(j-i)/2;k++)
{
double temp=seq[j-k];
seq[j-k]=seq[i+k+1];
seq[i+k+1]=temp;
}
}
p->SetPop(seq);
delete[] seq;
}
void MaintainSequence::Maintain(double * seq)
{
int t=r->randint((int)(dimension-length));
for(int i=t;i<t+length;i++)
{
for(int j=0;j<i;j++)
if(adapt->GetDistance((int)seq[j],(int)seq[j+1])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[j+1],(int)seq[(i+1)%dimension]))
for(int k=0;k<(i-j)/2;k++)
{
double temp=seq[i-k];
seq[i-k]=seq[j+k+1];
seq[j+k+1]=temp;
}
for(j=j+1;j<dimension;j++)
if(adapt->GetDistance((int)seq[j],(int)seq[(j+1)%dimension])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[(j+1)%dimension],(int)seq[(i+1)%dimension]))
for(int k=0;k<(j-i)/2;k++)
{
double temp=seq[j-k];
seq[j-k]=seq[i+k+1];
seq[i+k+1]=temp;
}
}
}
MaintainSequence::~MaintainSequence()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -