1.蛮力法

#include"Graph.cpp"
#include<stdio.h>
#include<vector>
using namespace std;
int s=0;
MGraph g;
int Count=1;
vector<vector<int> >ps;
void Insert(vector<int>s,int i,vector<vector<int>> &ps1){vector<int>s1;vector<int>::iterator it;for(int j=0;j<i;j++){s1=s;it=s1.begin()+j;s1.insert(it,i);ps1.push_back(s1);}
}
void Perm(int n){vector<vector<int>> ps1;vector<vector<int>>::iterator it;vector<int>s,s1;s.push_back(1);ps.push_back(s);for(int i=2;i<=n;i++){ps1.clear();for(it=ps.begin();it!=ps.end();it++){Insert(*it,i,ps1);}ps=ps1;}
}
void TSP(MGraph g,int s){vector<int>minpath;int minpath=INF;Perm(g.n-1);vector<vector<int>>::reverse_iterator it;vector<int>apath;int pathlen;printf("起点为%d的全部路径:",s);for(it=ps.rbegin();it!=ps.rend();it++){pathlen=0;int initv=s;apath=(*it);for(int i=0;i<(*it).size();i++){pathlen+=g.edges[initv][(*it)[i]];initv=(*it)[i];}pathlen+=g.edges[initv][s];if(pathlen<INF){printf("%d:",Count++);cout<<"0->";for(int i=0;i<apath.size();i++){printf("%d->",apath[i]);}printf("%d路径长度:%d\n",0,pathlen);if(pathlen<minpathlen){minpathlen<pathlen;minpath=apath;}}}printf("起点为%d的最短路径\n",s);printf("最短路径长度:%d\n",minpathlen);printf("最短路径:");printf("0->");for(int i=0;i<minpath.size();i++){printf("%d->",minpath[i]);}cout<<"0"<<endl;
}
int main(){TSP(g,s);
}

2.分支限界法

#include"Graph.cpp"
#include<string.h>
#include<vector>
using namespace std;
int s;
MGraph g;
int Count=1;
vector<int>minpath;
int minpathlen=INF;struct NodeType{int v,num;int visited[MAXV];int pathlen;vector<int>path;bool operator <(const NodeType &s) const{return pathlen>s.pathlen;}
};
void dispasolution(vector<int>path,int pathlen){cout<<Count++<<endl;for(int i=0;i<path.size();i++){printf("%2d",path[i]);}printf("路径长度",pathlen);
}
void TSP(){NodeType e,e1;priority_queue<NodeType>qu;e.v=0;e.pathlen=0;e.path.push_back(0);e.num=1;memset(e.visited,0,sizeof(e.visited));e.visited[0]=1;qu.push(e);while(!qu.empty()){e=qu.top();qu.pop();if(e.num==g.n){if(g.edges[e.v][s]!=0&&g.edges[e.v][s]!=INF){e.path.push_back(s);e.pathlen+=g.edges[e.v][s];dispasolution(e.path,e.pathlen);if(e.pathlen<minpathlen){minipathlen=e.pathlen;minpath=e.path;}}}else {for(int j=1;j<g.n;j++){if(g.edges[e.v][j]!=0&&g.edges[e.v][j]!=INF){if(e.visited[j]==1) continue;e1.v=j;e1.num=e.num+1;e1.path=e.path;e1.path.push_back(j);e1.pathlen=e.pathlen+g.edges[e.v][j];for(int j=0;j<g.n;j++){e1.visited[i]=e.visited[i];}if(e1.pathlen<minpathlen){e1.visited[j]=1;qu.push(e1);}}}    }}
}
int main(){TSP();
}

3.回溯法

void TSP(SET V,int i,vector<int>path,int pathlen){int prev;if(path.size()>0){prev=path.back();}path.push_back(i);pathlen+=g.edges[prev][i];if(V.size()==0) {if(g.edges[i][s]!=0&&g.edges[i][s]!=INF){path.push_back(0);pathlen+=g.edges[i][s];dispasolution(path,pathlen);if(pathlen<minpathlen){minpathlen=pathlen;minpath=path;}}}else {SET::iterator it;for(it=V.begin();it!=V.end();it++){SET tmpV=V;int j=*it;tmpV.erase(j);if(pathlen<minpathlen) TSP(tmpV,j,path,pathlen);}}
}

4.贪心法

void TSP(MGraph g){int i,j,k;int minj,minedge;bool find;vector<int>minpath;int minpathlen=0;minpath.push_back(0);i=0;while(minpath.size()!=g.n){find=false;minedge=INF;for(j=1;j<g.n;j++){if(g.edges[i][j]!=0&&g.edges[i][j]!=INF){k=0;while(k<minpath.size()&&j!=minpath[k]){k=0;while(k<minpath.size()&&j!=minpath[k]) k++;if(k==minpath.size()){if(g.edges[i][j]<minedge){minedge=g.edges[i][j];minj=j;}}}}}minpath.push_back(minj);minpathlen+=minedge;i=minj;}minpath.push_back(0);minpathlen+=g.edges[minj][0];}

5.动态规划法

typedef set<int>SET;
int s=0;
MGraph g;
int dp[1<<MAX][MAX];
int minpathlen;
vector<int>minpath;
void solve(){int n=g.n-1;memset(dp,0,sizeof(dp));for(int V=0;V<=(1<<n)-1;V++){for(int i=1;i<=n;i++){if(V&(1<<(i-1))){if(V==(1<<i-1)) dp[V][i]=edges[0][i];else {dp[V][i]=INF;for(int j=1;j<=n;j++){if(V&(1<<(j-1))&&i!=j){dp[V][i]=min(dp[V][i],dp[V^(1<<(i-1))][j]+g.edges[j][i]);}}}}}}
}

求解旅行商(货郎担)问题的五种方法相关推荐

  1. 鲸鱼优化算法WOA求解旅行商TSP优化问题(2022.6.2)

    鲸鱼优化算法WOA求解旅行商TSP优化问题(2022.6.2) 引言 1.鲸鱼优化算法WOA 1.1 WOA算法原理介绍 1.1.1 包围猎物 1.1.2 气泡网式攻击猎物(开发阶段) 1.1.3 寻 ...

  2. matlab算法大全 pdf_遗传模拟退火算法求解旅行商(TSP)问题

    hello大家好,很高兴又和大家见面了.在之前的遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解和模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解这两篇推文中,分别讲解了 ...

  3. MATLAB求解非线性方程组的五种方法

    MATLAB求解非线性方程组的五种方法 求解线性方程分为两种方法–二分法和迭代法 常见的方法一共有5种 二分法 迭代法 牛顿法 割线法 拟牛顿法 Halley法 使用条件 二分法需要知道两个自变量,分 ...

  4. [LeetCode] 322.零钱兑换 五种方法讲解

    322.零钱兑换 五种方法讲解 文章目录 322.零钱兑换 五种方法讲解 1 问题描述 2 问题分析 3 解决策略 3.1 递归-暴力解决 3.2 递归-加入存储 3.3 BFS 3.4 动态规划-自 ...

  5. Linux:检查当前运行级别的五种方法

    2019独角兽企业重金招聘Python工程师标准>>> 运行级就是Linux操作系统当前正在运行的功能级别.存在七个运行级别,编号从0到6.系统可以引导到任何给定的运行级别.运行级别 ...

  6. python 重载_python模块重载的五种方法

    环境准备 新建一个 foo 文件夹,其下包含一个 bar.py 文件 bar.py 的内容非常简单,只写了个 print 语句 只要 bar.py 被导入一次,就被执行一次 print 禁止重复导入 ...

  7. Java字符串拼接的五种方法,哪种性能最好?

    作者 | 老坛酸菜WH 来源 | https://www.cnblogs.com/twzheng/p/5923642.html > 字符串拼接一般使用"+",但是" ...

  8. 五种方法创建 Java 对象,你知道几种呢?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 网络 五种方法创建java对象 作为Java开 ...

  9. python压缩包怎么安装-详解python解压压缩包的五种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...

  10. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

    Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...

最新文章

  1. 【Linux sshfs】sshfs将远程目录挂载到本地目录
  2. html布局overflow,overflow的中文意思
  3. [linx] ubuntu网络重启命令
  4. LAMP平台下构建Postfix邮件服务器
  5. C 标准IO 库函数与Unbuffered IO函数
  6. js方法写在html中,在js中写html代码怎么写
  7. java 自定义报表_设计好的报表是如何在 web 上显示的
  8. Leetcode每日一题:41.first-missing-positive(缺失的第一个正数)
  9. android 图库分析,Android开发之ImageSwitcher相册功能实例分析
  10. 推荐《Office SharePoint Server 2007案例实战开发》
  11. (旧)子数涵数·PS——换脸
  12. excel学习-阶梯查询函数lookup
  13. lv官网编码查询_成都市居住证编号查询系统
  14. 智能人物画像综合分析系统——Day16
  15. 单肩包属于什么类目_包包属于什么商标类目
  16. 面向工业物联网的拍赫兹通信
  17. [企业信息化大家学系列]制造业税务成本
  18. 数据库面试——锁的12连问,赶紧收藏!
  19. 合肥太阳能电池片表面缺陷检测-施努卡
  20. 第一次写需求文档的心酸历程

热门文章

  1. 肖星老师《一本书读懂财报》经典语句摘录(下)实战篇
  2. 华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响
  3. 计算机清单笔记本,2019吃鸡笔记本电脑配置清单,吃鸡高手给你分享
  4. linux 嵌入式汇编 adc,嵌入式Linux ARM汇编(四)——ARM汇编程序设计
  5. pandas的数据拼接与合并(concat、join、merge)
  6. 心态-《生活的艺术》书中的精髓:中国人享受生活,所以有着独特的生活的艺术,享受生活首先要有闲暇时光,也要去感受生活,才会体验到生活的乐趣
  7. Synaptics蠕虫木马分析
  8. 编程理念-程序基本编写IPO方法
  9. 【考】现代传感器技术作业一至四 复习用
  10. 华为注册“花瓣编程”,释放了什么信号?