📄 speedtsplocation3.cpp
字号:
else //当前城市为在速度中出现过
{
if(n_s_location[(int)i_optim[(p1+1)%dimension]][0]==-1)
{
n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1+1)%dimension];
n_s_location[(int)i_optim[(p1+1)%dimension]][0]=(int)i_optim[p1];
newspeed[newlength][0]=(int)i_optim[p1];
newspeed[newlength][1]=(int)i_optim[(p1+1)%dimension];
newlength++;
}
else
{
if(n_s_location[(int)i_optim[(p1+1)%dimension]][1]==-1)
{
n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1+1)%dimension];
n_s_location[(int)i_optim[(p1+1)%dimension]][1]=(int)i_optim[p1];
newspeed[newlength][0]=(int)i_optim[p1];
newspeed[newlength][1]=(int)i_optim[(p1+1)%dimension];
newlength++;
}
else
{
int m;
if(fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][0],(int)i_optim[(p1+1)%dimension])>fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][1],(int)i_optim[(p1+1)%dimension]))
m=0;
else
m=1;
if(fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][m],(int)i_optim[(p1+1)%dimension])>fitness->GetDistance((int)i_optim[(p1+1)%dimension],(int)i_optim[p1]))
{
for(int k=0;k<newlength;k++)
{
if((int)i_optim[(p1+1)%dimension]==newspeed[k][0])
if(n_s_location[(int)i_optim[(p1+1)%dimension]][m]==newspeed[k][1])
{
newspeed[k][0]=(int)i_optim[(p1+1)%dimension];
newspeed[k][1]=(int)i_optim[p1];
break;
}
if((int)i_optim[(p1+1)%dimension]==newspeed[k][1])
if(n_s_location[(int)i_optim[(p1+1)%dimension]][m]==newspeed[k][0])
{
newspeed[k][0]=(int)i_optim[(p1+1)%dimension];
newspeed[k][1]=(int)i_optim[p1];
break;
}
}
}
else
{
if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0]==-1)
{
n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1-1+dimension)%dimension];
n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0]=(int)i_optim[p1];
newspeed[newlength][0]=(int)i_optim[p1];
newspeed[newlength][1]=(int)i_optim[(p1-1+dimension)%dimension];
newlength++;
}
else
if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1]==-1)
{
n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1-1+dimension)%dimension];
n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1]=(int)i_optim[p1];
newspeed[newlength][0]=(int)i_optim[p1];
newspeed[newlength][1]=(int)i_optim[(p1-1+dimension)%dimension];
newlength++;
}
else
{
int m;
if(fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0],(int)i_optim[(p1-1+dimension)%dimension])>fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1],(int)i_optim[(p1-1+dimension)%dimension]))
m=0;
else
m=1;
if(fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m],(int)i_optim[(p1-1+dimension)%dimension])>fitness->GetDistance((int)i_optim[(p1-1+dimension)%dimension],(int)i_optim[p1]))
{
for(int k=0;k<newlength;k++)
{
if((int)i_optim[(p1-1+dimension)%dimension]==newspeed[k][0])
if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m]==newspeed[k][1])
{
newspeed[k][0]=(int)i_optim[(p1-1+dimension)%dimension];
newspeed[k][1]=(int)i_optim[p1];
break;
}
if((int)i_optim[(p1-1+dimension)%dimension]==newspeed[k][1])
if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m]==newspeed[k][0])
{
newspeed[k][0]=(int)i_optim[(p1-1+dimension)%dimension];
newspeed[k][1]=(int)i_optim[p1];
break;
}
}
}
}
}
}
}
}
}
for(j=0;j<length;j++) //从原有速度中选取
{
if(newlength>=dimension*E3)
break;
if((n_s_location[speed[j][0]][0]>=0))
{
if(n_s_location[speed[j][0]][1]<0)
{
if(n_s_location[speed[j][0]][0]!=speed[j][1])
{
if(n_s_location[speed[j][1]][0]==-1)
{
n_s_location[speed[j][0]][1]=speed[j][1];
n_s_location[speed[j][1]][0]=speed[j][0];
newspeed[newlength][0]=speed[j][0];
newspeed[newlength][1]=speed[j][1];
newlength++;
}
else
if(n_s_location[speed[j][1]][1]==-1)
{
n_s_location[speed[j][0]][1]=speed[j][1];
n_s_location[speed[j][1]][1]=speed[j][0];
newspeed[newlength][0]=speed[j][0];
newspeed[newlength][1]=speed[j][1];
newlength++;
}
else
{
int m;
if(fitness->GetDistance(n_s_location[speed[j][1]][0],speed[j][1])>fitness->GetDistance(n_s_location[speed[j][1]][1],speed[j][1]))
m=0;
else
m=1;
if(fitness->GetDistance(n_s_location[speed[j][1]][m],speed[j][1])>fitness->GetDistance(speed[j][1],speed[j][0]))
{
for(int k=0;k<newlength;k++)
{
if(speed[j][1]==newspeed[k][0])
if(n_s_location[speed[j][1]][m]==newspeed[k][1])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
if(speed[j][1]==newspeed[k][1])
if(n_s_location[speed[j][1]][m]==newspeed[k][0])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
}
}
}
}
}
else
{
int m;
if(fitness->GetDistance(n_s_location[speed[j][0]][0],speed[j][0])>fitness->GetDistance(n_s_location[speed[j][0]][1],speed[j][0]))
m=0;
else
m=1;
if(fitness->GetDistance(n_s_location[speed[j][0]][m],speed[j][0])>fitness->GetDistance(speed[j][0],speed[j][1]))
{
for(int k=0;k<newlength;k++)
{
if(speed[j][0]==newspeed[k][0])
if(n_s_location[speed[j][0]][m]==newspeed[k][1])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
if(speed[j][0]==newspeed[k][1])
if(n_s_location[speed[j][0]][m]==newspeed[k][0])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
}
}
}
}
else
{
if(n_s_location[speed[j][1]][0]==-1)
{
n_s_location[speed[j][0]][0]=speed[j][1];
n_s_location[speed[j][1]][0]=speed[j][0];
newspeed[newlength][0]=speed[j][0];
newspeed[newlength][1]=speed[j][1];
newlength++;
}
else
if(n_s_location[speed[j][1]][1]==-1)
{
n_s_location[speed[j][0]][0]=speed[j][1];
n_s_location[speed[j][1]][1]=speed[j][0];
newspeed[newlength][0]=speed[j][0];
newspeed[newlength][1]=speed[j][1];
newlength++;
}
else
{
int m;
if(fitness->GetDistance(n_s_location[speed[j][1]][0],speed[j][1])>fitness->GetDistance(n_s_location[speed[j][1]][1],speed[j][1]))
m=0;
else
m=1;
if(fitness->GetDistance(n_s_location[speed[j][1]][m],speed[j][1])>fitness->GetDistance(speed[j][1],speed[j][0]))
{
for(int k=0;k<newlength;k++)
{
if(speed[j][1]==newspeed[k][0])
if(n_s_location[speed[j][1]][m]==newspeed[k][1])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
if(speed[j][1]==newspeed[k][1])
if(n_s_location[speed[j][1]][m]==newspeed[k][0])
{
newspeed[k][0]=speed[j][0];
newspeed[k][1]=speed[j][1];
break;
}
}
}
}
}
}
sworm[i]->SetSpeed(newspeed,newlength);
for(j=0;j<dimension;j++)
delete[] n_s_location[j];
delete[] n_s_location;
for(j=0;j<length;j++)
{
delete[] speed[j];
}
for(j=0;j<dimension;j++)
{
delete[] newspeed[j];
}
delete[] speed;
delete[] newspeed;
// delete[] location;
// delete[] location1;
delete[] i_optim;
delete[] g_optim;
}
SpeedTSPLocation3::~SpeedTSPLocation3()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -