模拟退火算法求解旅行商问题

设置n个城市。每个走过一遍回到原点

#include<iostream>
#include<cmath>
#include<time.h>
using namespace std;

double T0 = 280;//初始温度
double a = 0.92;//温度衰减系数
int N = 10;//城市数n10
int  city_list[10] = {1,2,3,4,5,6,7,8,9,10};//存放解路径
int Lk = 1000;//每个温度下固定迭代次数

int city[10][2] =
{
	{1,2},{22,10},{13,13},{12,12},{1,9},{3,5},{10,15},{18,10},{2,10},{4,20}
};//城市坐标

double distance(int* c1, int* c2)//计算两个城市的距离
{
	double dis = 0;//初始化距离
	double x1 = *c1;
	double x2 = *c2;
	double y1 = *(c1 + 1);
	double y2 = *(c2 + 1);
	dis = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
	return dis;
}

double path_len(int* city_list)
{
	double len = 0;
	for (int i = 0; i < N - 1; i++)
	{
		int c1 = *(city_list+i);
		int c2 = *(city_list + i + 1);
		double dis = distance(city[c1-1], city[c2-1]);//减1是因为city_list是从1到10
		len += dis;
	}
	int index = *cit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值