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. ct检查床的移动精度是指_炮塔铣床、数控铣床导轨平行度(扭曲)的检验
  2. Brainfuck解释器(C#)
  3. Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O
  4. Delphi String的散漫记录,真是知识无数,陷阱无数(转)
  5. js图片加载效果(延迟加载+瀑布流加载)
  6. 科研|我最煎熬的学术时刻,是耗时3年完成了一篇论文
  7. Machine Learning Notes Ⅲ
  8. c++ 时间戳 转换成时间_区块链世界的公证人:时间戳
  9. 《从零开始学Swift》学习笔记(Day 39)——构造函数重载
  10. 关闭进程_Xbox Game Bar重磅更新:可不离开游戏关闭系统进程
  11. 基于ffmpeg的kxmovie的使用
  12. 大数据产业发展状况及企业数据资产化运营核心
  13. 江西省萍乡市谷歌高清卫星地图下载
  14. ORACLE 11G利用 ORDS+pljson来实现json_table 效果
  15. 算法复杂度的计算方法
  16. prisma 连接不上Postgres
  17. matplotlib默认字体设置探索
  18. HCTF 2017 bin Level1 Evr_Q Writeup
  19. 自动控制原理 第一章 控制系统的一般概念
  20. 微信支付链接二维码生成

热门文章

  1. Ubuntu 4.10 (Warty Warthog,长疣的疣猪)
  2. DEDE自动调用轮播图/幻灯片
  3. 人口流向数据_各省全国各省人口净流入数据:浙江、广东、新疆、重庆成宠儿...
  4. 有得必有失,你该把技术做多细?
  5. 最新版的PDF转图片软件
  6. java微信支付v3系列——6.微信支付查询订单API
  7. 农夫山泉(数据范围是亮点)
  8. Word图表的中英题注及引用
  9. Android 点击短信链接打开App
  10. App首屏接口性能优化