news 2026/5/10 9:05:37

回溯法 -- 旅行售货员问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
回溯法 -- 旅行售货员问题

旅行售货员问题

给定一个n 个顶点的带权无向完全图 G=(V, E, w),其中顶点代表城市,边的权值 w(i,j) 代表从城市 i 到城市 j 的距离(w(i,j)>0,且 w(i,j)=w(j,i))。

要求:

  1. 找到一条从顶点 1(起点城市)出发经过其余所有 n-1 个顶点各一次,最后回到起点 1的周游路线;

  2. 使得这条路线的总权值(总路程)最小

代码求解

class TraveLing { private: std::vector<std::vector<int> > a; // int vernum = 0; std::vector<int> x; // 当前序列 {0,1,2,3,4} std::vector<int> bestx; // 当前最有序列 int cc; // 当前费用 int bestc; // 当前最优费用 ​ void PrintVecX() { for (int i = 1; i <= vernum; ++i) { printf("%5d", x[i]); } printf("\n-----------------\n"); } void BackTrack(int i) { if (i == vernum) { if (a[x[i-1]][x[i]] != INT_MAX && a[x[i]][x[1]] != INT_MAX && (cc + a[x[i - 1]][x[i]] + a[x[i]][x[1]]) < bestc) { bestx = x; bestc = cc + a[x[i - 1]][x[i]] + a[x[i]][x[1]]; } } else { for (int j = i; j <= vernum; ++j) { if(a[x[i-1]][x[j]] != INT_MAX && (cc + a[x[i-1]][x[j]]) < bestc || bestc == INT_MAX ) { std::swap(x[i], x[j]); cc += a[x[i - 1]][x[i]]; BackTrack(i + 1); cc -= a[x[i - 1]][x[i]]; std::swap(x[i], x[j]); } } } } public: TraveLing() {} ~TraveLing() {} void PrintVec() const { for (int i = 1; i <= vernum; ++i) { printf("%5d", bestx[i]); } printf("%5d", bestx[1]); printf("\n-----------------\n"); } int TSP(const std::vector<std::vector<int> >& aa, int n) { a = aa; vernum = n; x.resize(n + 1, 0); for (int i = 1; i <= vernum; ++i) { x[i] = i; } bestc = INT_MAX; BackTrack(2); return bestc; } }; ​

固定起点,深度优先枚举所有路线,用剪枝减少搜索,回溯尝试所有可能,最终找到最短回路

时间复杂度:O (n!)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 9:01:32

如何用qmcdump一键解锁QQ音乐加密文件?终极解密指南

如何用qmcdump一键解锁QQ音乐加密文件&#xff1f;终极解密指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾…

作者头像 李华
网站建设 2026/4/15 7:44:37

基于Coze-Loop的网络安全日志分析优化

基于Coze-Loop的网络安全日志分析优化 1. 引言 网络安全团队每天都要面对海量的日志数据&#xff0c;从防火墙告警到系统事件&#xff0c;从网络流量到用户行为记录。传统的日志分析方式往往让人头疼&#xff1a;响应慢、误报多、关键威胁容易被淹没在数据海洋中。想象一下&a…

作者头像 李华
网站建设 2026/4/15 7:43:42

GHelper:5分钟上手华硕笔记本控制工具,彻底告别系统卡顿

GHelper&#xff1a;5分钟上手华硕笔记本控制工具&#xff0c;彻底告别系统卡顿 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, T…

作者头像 李华
网站建设 2026/4/15 7:41:16

Zig中结构体和枚举怎么用?

在 Zig 编程语言中&#xff0c;结构体&#xff08;struct&#xff09;和枚举&#xff08;enum&#xff09;是两种基本的数据类型。 结构体和枚举是定义和使用自定义数据类型的两种主要方式。 结构体和枚举提供了更高层次的数据组织和类型安全&#xff0c;适用于不同的编程场景…

作者头像 李华
网站建设 2026/4/15 7:37:11

多智能体系统的一致性维护:处理冲突、达成共识的算法与实践

多智能体系统的一致性维护:处理冲突、达成共识的算法与实践 1. 核心概念 多智能体系统(Multi-Agent System, MAS)是人工智能和分布式系统领域的重要研究方向,它由多个自主或半自主的智能体组成,这些智能体通过相互协作、竞争或协商来解决单个智能体无法或难以解决的问题…

作者头像 李华