- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
原模拟退火算法解决TSP问题c源程序
模拟退火算法解决TSP问题源程序(C++)
/*********************************************************************
模拟退火算法解决TSP问题
*********************************************************************/
/*********************************************************************
输入格式(城市坐标.in):
第行:1个整数N,表示城市的数量
第..N+1行:每行有个空格分开的整数x,y,第i+1行的x,y表示城市i的坐标
***********************************************************************/
#include iostream
#include cmath
#include time.h
using namespace std;
const int MAXN = 501; //最大城市数
const double INIT_T =2000; //初始温度
const double RATE = 0.95; //温度衰减率
const double FINAL_T = 1E-10; //终止温度
const int IN_LOOP = 13000; //内层循环次数
const int OUT_LOOP = 2000; //外层循环次数
const int P_LIMIT = 10000; //概率选择次数
struct path { //定义路径结构类型
int City[MAXN]; //依次遍历的城市的序号
double Length; //所有城市的路径总长度
};
int N; //城市数量
double D[MAXN][MAXN]; //任意两个城市之间的距离
path bestpath; //最优的遍历路径
inline double dist(int x1, int y1, int x2, int y2) //计算两点之间的距离
{
return sqrt(double((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
}
inline double totaldist(path p) //计算遍历路径P的总长度
{
int i;
double cost = 0;
for (i=1; iN; i++)
{
cost += D[p.City[i]][p.City[i+1]];
}
cost += D[p.City[1]][p.City[N]];
return cost;
}
void init() //读入数据,并初始化
{
int C[MAXN][2]; //城市的坐标
int i, j;
freopen(城市坐标.in, r, stdin);
//freopen(结果输出.out, w, stdout);
scanf(%d, N);
for (i=1; i=N; i++)
scanf(%d%d, C[i][0], C[i][1]);
for (i=1; iN; i++) //计算任意两个城市之间的路径长度
for (j=i+1; j=N; j++)
{
D[i][j] = D[j][i] = dist(C[i][0], C[i][1], C[j][0], C[j][1]);
}
for (i=1; i=N; i++) //最优解的初始状态
bestpath.City[i] = i;
bestpath.Length = totaldist(bestpath);
srand(
文档评论(0)