社区
C语言
帖子详情
tsp问题求解
anjilabibi
2016-12-15 09:37:57
我用最临近法求解tsp问题但是结果出不来,求教。
...全文
351
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)。首先阐述了
TSP问题
的基本描述,接着提出了
求解
思路,通过计算目标函数的上界和下界来指导搜索过程。然后,展示了分支限界法的具体搜索步骤,最终找到了
TSP问题
的一个最优解。
用动态规划法
求解
TSP问题
本文深入探讨了
TSP问题
(旅行商问题),包括问题描述、应用实例、蛮力法
求解
、最优性原理证明、动态规划法
求解
过程及算法设计。通过详细解释状态方程、填表步骤和算法流程,帮助读者理解如何
求解
TSP问题
。
ILOG CPLEX
求解
TSP问题
本文介绍了如何运用ILOG CPLEX
求解
旅行商问题(TSP)。通过展示CPLEX的代码实现,展示了针对TSP的第二种模型的优化
求解
过程。与遗传算法对比,CPLEX能够找到154的最优解,而遗传算法通常在160左右,偶尔达到154。
TSP问题
比较好用的
求解
器
博客围绕使用学习方法
求解
TSP问题
展开,介绍了常见的concord和LKH
求解
器。详细说明了在ubuntu20.04系统下,使用python和conda虚拟环境安装这两个
求解
器的步骤,以及如何使用它们
求解
TSP问题
,给出了相关代码示例。
遗传算法
求解
TSP问题
本实验围绕遗传算法
求解
TSP问题
展开,分析了种群规模、交叉概率和变异概率对结果的影响,比较了不同变异策略及个体选择分配策略的效果,还探讨了算法在不同规模
TSP问题
中的性能。实验中解决了交叉概率设置等问题,为
求解
大规模
TSP问题
提供了参考。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章