C# 计算2Opt完成的所有节省的总和

C# 计算2Opt完成的所有节省的总和,c#,graph,graph-algorithm,traveling-salesman,C#,Graph,Graph Algorithm,Traveling Salesman,如果不计算2Opt移动前后的路线距离,而不只是计算差异,我将如何计算2Opt所节省的所有费用 我会解释我尝试了什么,但我总是得到错误的结果。我想知道我的错误是语义错误还是语义错误。算法本身工作正常,因为我可以看到绘制的结果。 我有两个for循环和一个if语句。如果If语句为真,我从If语句中减去较大的和,再加上较小的和。结果应该是节省的负值,但我得到了一些大的数字,这使得我的整个TSP具有负长度 if (rjesenjeDuplikat[vrhPrijePrvogVrha, drugiVrh]

如果不计算2Opt移动前后的路线距离,而不只是计算差异,我将如何计算2Opt所节省的所有费用

我会解释我尝试了什么,但我总是得到错误的结果。我想知道我的错误是语义错误还是语义错误。算法本身工作正常,因为我可以看到绘制的结果。 我有两个for循环和一个if语句。如果If语句为真,我从If语句中减去较大的和,再加上较小的和。结果应该是节省的负值,但我得到了一些大的数字,这使得我的整个TSP具有负长度

if (rjesenjeDuplikat[vrhPrijePrvogVrha, drugiVrh] + rjesenjeDuplikat[prviVrh, vrhPoslijeDrugogVrha] <
    rjesenjeDuplikat[vrhPrijePrvogVrha, prviVrh] + rjesenjeDuplikat[drugiVrh, vrhPoslijeDrugogVrha])
{
    int zaDodati = rjesenjeDuplikat[vrhPrijePrvogVrha, drugiVrh] + rjesenjeDuplikat[prviVrh, vrhPoslijeDrugogVrha]; // ne radi kako treba
    int zaOduzeti = rjesenjeDuplikat[vrhPrijePrvogVrha, prviVrh] + rjesenjeDuplikat[drugiVrh, vrhPoslijeDrugogVrha];
    ukupnaDuljinaNNH = ukupnaDuljinaNNH + zaDodati - zaOduzeti;
    ...}
if(rjesenjeDuplikat[vrhPrijePrvogVrha,drugiVrh]+rjesenjeDuplikat[prviVrh,vrhposlijedrugvrha]<
rjesenjeDuplikat[vrhPrijePrvogVrha,prviVrh]+rjesenjeDuplikat[drugiVrh,vrhposlijedrugvrha])
{
int zaDodati=rjesenjeDuplikat[vrhPrijePrvogVrha,drugiVrh]+rjesenjeDuplikat[prviVrh,vrhposlijedrugvrha];//ne radi kako treba
int zaOduzeti=rjesenjeDuplikat[vrhPrijePrvogVrha,prviVrh]+rjesenjeDuplikat[drugiVrh,vrhposlijedrugvrha];
Ukupnaduljinnh=Ukupnaduljinnh+zaDodati-zaOduzeti;
...}

您是否在第一次使用Ukupnaduljinnh之前初始化它?如果不是,这可以解释意外的结果。不过,一般来说,像你这样的方法应该可以——你不需要计算整个旅行的长度(旧的和新的),然后减去。谢谢你的回答。我实际上计算的NNH距离是错误的,所以似乎2Opt距离计算是错误的,而它在整个过程中都是正确的。