#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int noEdge=65535;
class Traveling
{public:void BackTrack(int i);int n;        //图G的顶点数 int *x;        //当前的解 int *bestx; // 当前的最优解 int **a;    // 图G的临界矩阵 int cc;     // 当前费用 int bestc;  //当前最优花费的值 //  int noEdge  无边标记 };void Traveling::BackTrack(int i){if(i == n){if(a[x[n-1]][x[n]] !=noEdge && a[x[n]][1] !=noEdge &&(cc+a[x[n-1]][x[n]]+a[x[n]][1]<bestc || bestc ==noEdge)){for(int j=1;j<=n;j++){bestx[j]=x[j];}bestc=cc+a[x[n-1]][x[n]]+a[x[n]][1];}}else{for(int j=i;j<=n;j++){if(a[x[i-1]][x[j]] != noEdge && (cc+a[x[i-1]][x[j]]<bestc||bestc == noEdge)){swap(x[i],x[j]);cc+=a[x[i-1]][x[i]];BackTrack(i+1);cc-=a[x[i-1]][x[i]];swap(x[i],x[j]);}}}} int TSP(int **a,int v[],int n){Traveling Y;Y.x = new int [n+1];for(int i=1;i<=n;i++){Y.x[i]=i;}Y.a= a;Y.n= n;Y.bestc = noEdge;Y.bestx = v;Y.cc = 0;Y.BackTrack(2);cout<<"旅行售货员问题的最优路径:";for(int i=1;i<=n;i++){cout<<Y.bestx[i]<<"  ";}cout<<1<<endl;delete []Y.x;return Y.bestc; }
int main()
{int n;cout<<"输入城市的个数";cin>>n;int **vector = new int *[n+1];for(int i=1;i<=n;i++){vector[i] = new int [n+1];}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){vector[i][j]= noEdge;}}int x;cout<<"输入城市间存在的通路的个数";cin>>x;cout<<"输入数据的形式为:(1 2 3)"<<endl;int index_i,index_j,value;for(int i=0;i<x;i++){cin>>index_i>>index_j>>value;vector[index_i][index_j]=value;vector[index_j][index_i]=value;}cout<<"输出临界矩阵"<<endl; for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<setw(5)<<vector[i][j]<<"  ";}cout<<endl;}int *v = new int [n+1];cout<<"旅行售货员问题的最优值为:"<<TSP(vector,v,n)<<endl;}

算法设计与分析——回溯法——旅行售货员问题相关推荐

  1. 【算法导论07】回溯法-旅行售货员问题

    07回溯法-旅行售货员问题 问题描述: 已知有m个城市,城市之间由n条不同长度的道路相连.一个售货员从一座城市出发,途径所有城市,并最终回到原点,设计算法计算售货员所走的最短路径结点. 问题分析: 从 ...

  2. 算法设计与分析-回溯法

    单选题 关于回溯法以下叙述中不正确的是( ). A. 回溯法有"通用解题法"之称,它可以系统地搜索一个问题的所有解或任意解 B. 回溯法是一种既带系统性又带跳跃性的搜索算法 C. ...

  3. 算法设计与分析——回溯法——装载问题

    0027算法笔记--[回溯法]回溯法与装载问题 自己写的代码: #include <iostream> using namespace std; template <class Ty ...

  4. 算法设计与分析——回溯法——批处理作业调度

    问题描述:给定n个作业的集合{J1,J2,-,Jn}.每个作业必须先由机器1处理,然后由机器2处理.作业Ji需要机器j的处理时间为tji.对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时 ...

  5. 算法设计与分析——回溯法——n皇后问题

    一.什么是N皇后问题? 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后 ...

  6. 算法设计与分析——回溯法——圆排列问题

    #include<iostream> #include<math.h> using namespace std; class Circle {public:float Cent ...

  7. 算法设计与分析——回溯法——符号三角形问题

    #include<iostream> using namespace std;class Triangle{public:void Backtrack(int t);int n;//第一行 ...

  8. 回溯法——旅行售货员问题

    旅行售货员问题即给几个地点,相互之间有路径,有每个路径对应的消耗的费用.我们将起点设为1,其他地点设为2,3,4-n.我们起初将所有路径费用都设置成∞,然后再输入 相通路径的费用,再更新费用值.我们以 ...

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

    一.问题 同文章 <分支限界法----旅行售货员问题> 二.代码实现 程序实现了 递归回溯 解决该问题 迭代回溯算法仍在考虑中... /************************** ...

最新文章

  1. 力扣算法题—045跳跃游戏二
  2. 003_SpringBoot整合Filter
  3. Linux 0.11进程运行轨迹的跟踪,进程运行轨迹的跟踪与统计
  4. python符号运算_用Python做科学计算-SymPy符号运算
  5. 【旧文章搬运】无Device的驱动如何通信
  6. IPMSG飞鸽传书3——协议翻译
  7. oracle创建视图类型为日期,oracle创建视图包含clob字段,报错:数据类型不一致:应为-,但却获得CLOB...
  8. 大数的加减法C语言程序设计,超大数相加C语言程序设计
  9. NRF52832 PWM 占空比调整详解
  10. vue路由守卫以及用法
  11. 超全超详细的安装nvidia显卡驱动教程
  12. QT图形显示和处理6
  13. FS32R294JCK0MJDT功能、FS32R294KCK0MJDT特点、FS32R294KAK0MJDT雷达微控制器
  14. WEB网站设计用户登录的安全机制
  15. 多功能频谱分析仪TFN RMT系列,满足您对频谱分析仪的多种幻想。
  16. 一篇文章,带你详细了解华为认证体系证书(二)
  17. 如何解决电脑C盘不能扩展问题
  18. 最新“量子纠缠”原子使量子计算机更进一步
  19. pycharm贪吃蛇
  20. 1、Centos之常见目录作用介绍

热门文章

  1. 不装mono,你的.NET程序照样可以在Linux上运行
  2. 项目中引入composer包
  3. 【ArcGIS风暴】ArcGIS快捷键大全
  4. Android之非root手机run-as命令获取debug版本apk里面的数据(shared_prefs文件,lib下面的so,数据库文件)
  5. Android之View基础总结(View的事件体系一)
  6. eclipse myeclipse 快捷键
  7. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(7)我用函数写了个特洛伊木马
  8. 看得懂的设计模式 享元模式python3 最基本(简单)实现
  9. android log.d 格式化,android – 在我的代码中使用Log.d()或Log.e()
  10. 高空真人特技表演的这些冷知识,你都知道吗?