2 opt for TSP. The seed solution is global, in sol[] private void Loc2opt() // 2-opt { int i,j,temp,cost1,cost2,i1,i2,j1,j2,DeltaMax,imax,jmax; start: DeltaMax=imax=jmax=0; for(i=0;i1 && (j-i)<(n-1)) { cost1=d[sol[i1],sol[i]]+d[sol[i],sol[i2]]+d[sol[j1],sol[j]]+d[sol[j],sol[j2]]; cost2=d[sol[i1],sol[j]]+d[sol[j],sol[i2]]+d[sol[j1],sol[i]]+d[sol[i],sol[j2]]; } else if((j-i)==1) { cost1=d[sol[i1],sol[i]]+d[sol[i],sol[j]]+d[sol[j],sol[j2]]; cost2=d[sol[i1],sol[j]]+d[sol[j],sol[i]]+d[sol[i],sol[j2]]; } else if((j-i)==(n-1)) { cost1=d[sol[j1],sol[j]]+d[sol[j],sol[i]]+d[sol[i],sol[i2]]; cost2=d[sol[j1],sol[i]]+d[sol[i],sol[j]]+d[sol[j],sol[i2]]; } if(cost1-cost2>DeltaMax) { DeltaMax=cost1-cost2; imax=i; jmax=j; } } if(DeltaMax>0) { temp=sol[imax]; sol[imax]=sol[jmax]; sol[jmax]=temp; // MessageBox.Show(this.label1,"Scambio "+sol[imax].ToString()+" "+sol[jmax].ToString()); goto start; } }