社区
C语言
帖子详情
tsp问题求解
anjilabibi
2016-12-15 09:37:57
我用最临近法求解tsp问题但是结果出不来,求教。
...全文
359
3
打赏
收藏
tsp问题求解
我用最临近法求解tsp问题但是结果出不来,求教。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小灸舞
版主
2016-12-16
打赏
举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
anjilabibi
2016-12-15
打赏
举报
回复
程序贴上去了希望有大佬能给解决一下。
anjilabibi
2016-12-15
打赏
举报
回复
#include "stdafx.h" # include<time.h> # include<math.h> # include<stdio.h> # include<stdlib.h> # define Max 11 int cn, tt, start; // 要经过的城市个数,,起点 double arry1[Max][Max]; // 邻接矩阵,存放两两城市间的距离 double fn = 0, gn = 0, hn = 0; // 启发函数 double f1 = 0, g1 = 0, h1 = 0; int arry3[Max]; // 存放已历经的城市名 int arry4[Max]; // 标志位数组,cn个城市中已历经的置,未历经的置 // 定义顶点数据类型 struct Vertex { int x; int y; }City[Max]; /////////////////////////////////////////////////////////////////////////////////////////// // 主函数 void main() { void RandNum(int); void CityCoordinate(); double CityCost(int, int); void TSP(); double MaxLengh(); int i, j; CityCoordinate(); // 随机生成并显示个城市及其坐标 printf("\n"); printf("\n"); for (i = 1; i<Max; i++) // 随机生成并显示表示两城市间距离的邻接矩阵 { tt = 0; for (j = i; j<Max; j++, tt++) { if (i == j) arry1[i][j] = 0; else arry1[i][j] = CityCost(i, j); } } TSP(); // 用最小生成树查找最短路径 printf("\n从%d出发的最佳路径为:%d→", start, start); for (i = 2; i <= cn; i++) printf("%d→", arry3[i]); printf("%d\n", arry3[cn + 1]); printf("总路径长度为:%f\n", fn); } /////////////////////////////////////////////////////////////////////////////////////////// // 随机数产生器 int RandNum(int max) { int m; m = rand() % (max - 1) + 1; // 产生一个~20的随机数 return m; } // 生成并显示城市坐标 void CityCoordinate() { int i, j, hh = 0; srand((unsigned)time(NULL)); // 使用当前时间作为种子 City[1].x = RandNum(Max); // 生成并显示第个城市的坐标 City[1].y = RandNum(Max); printf("City[1]的坐标: (%d,%d); ", City[1].x, City[1].y); for (i = 2; i<Max; i++) // 生成第~10个城市的坐标 { City[i].x = RandNum(Max); City[i].y = RandNum(Max); for (j = 1; j<i; j++) // 检查重合坐标,有重合时重新生成 if (City[i].x == City[j].x&& City[i].y == City[j].y) i = i - 1; hh++; // 换行 if (0 != i % 2) hh = 0; if (0 == hh) printf("\n"); printf("City[%d]的坐标: (%d,%d); ", i, City[i].x, City[i].y);// 显示第i个城市的坐标 } } // 计算并显示城市间的欧式距离 double CityCost(int i, int j) { int x1, x2, y1, y2, hh = 0; double Distance, t; x1 = City[i].x; x2 = City[j].x; y1 = City[i].y; y2 = City[j].y; t = (x1 - x2)* (x1 - x2) + (y1 - y2)* (y1 - y2); Distance = sqrt(t); arry1[i][j] = Distance; hh++; if (0 != tt % 2) hh = 0; // 换行 if (0 == hh) printf("\n"); printf("%d与%d的距离:%3.2f ", i, j, Distance); return arry1[i][j]; } // 用最邻近法找最短路径 void TSP(){ int Mnode; // 起点,当前搜索层的父节点 int h, i, k, l, m, j; double min; int x, y = 0; int arry2[Max] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };;// 标志位数组,已历经的置0,未历经的置1 double temp1 = 100, temp2 = 100; printf("\n请输入要经过的城市个数:"); scanf_s("%d", &cn); printf("\n"); printf("请输入要历经的城市:\n"); for (h = 1; h <= cn; h++) // 输入历经节点 { scanf_s("%d", &x); if (0 == arry2[x]) arry2[x] = 1; // 避免重复 else if (1 == arry2[x]) h = h - 1; } printf("\n"); for (i = 1; i<Max; i++) // 显示历经节点 if (1 == arry2[i]) printf("%d ", i); printf("\n"); printf("请输入出发城市:"); // 输入出发点 scanf_s("%d", &start); printf("\n"); arry2[start] = 0; // 初始化 arry3[1] = start; arry3[cn + 1] = start; //首尾端点一致 Mnode = arry3[1]; ////////////////////////////////////////寻找最近的点 for (k = 1, l = 1; k < Max&&arry2[k] == 1; k = m){ for (j = 1; j < Max; j++){ if (arry2[j] == 1 && j != k) { min = arry1[k][j]; if (arry1[k][j] <= min){ min = arry1[k][j]; m = j; arry3[++l] = j; } } } fn += min; } }
【分支限界法】
求解
TSP问题
问题描述
TSP问题
是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。
求解
思路 采用贪心法求得近似解为1→3→5→4→2→1,其路径长度为1+2+3+7+3=16,这可以作为
TSP问题
的上界。 把矩阵中每一行最小的元素相加,可以得到一个简单的下界,其路径长度为1+3+1+3+2=10,但是还有一个信...
ILOG CPLEX
求解
TSP问题
什么是
tsp问题
就不解释了,直接上代码 /********************************************* * OPL 12.6.0.0 Model * Author: Liao Given * Creation Date: 2019-8-10 at 下午4:47:34 *********************************************/ ...
TSP问题
比较好用的
求解
器
如何使用concord和LKH
求解
器
用动态规划法
求解
TSP问题
一、
求解
TSP问题
1、问题描述
TSP问题
(担货郎问题,旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短 各个城市间的距离可以用代价矩阵来表示。 2、【应用】 例如:校车怎样以最短的路线行走而接送到所有学生?报纸和牛奶的配送路线怎样最优?循环旅游怎样选取才能实现开支最少?公司视察子公司怎样出差更高效? 3、【蛮力法
求解
】 用蛮力法解决T...
遗传算法
求解
TSP问题
实验内容 对于同一个
TSP问题
,分析种群规模、交叉概率和变异概率对算法结果的影响。 增加1种变异策略和1种个体选择概率分配策略,比较
求解
同一
TSP问题
时不同变异策略及不同个体选择分配策略对算法结果的影响。 分析遗传算法
求解
不同规模
TSP问题
的算法性能 城市数量越大或者群体规模越大或者最大迭代数越大,运行等待结果的时间越久 TSP规模越大,用时越长,但是当规模大到一定程度时,遗传算法的
求解
性能优于...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章