算法设计与分析——回溯法——旅行售货员问题
生活随笔
收集整理的這篇文章主要介紹了
算法设计与分析——回溯法——旅行售货员问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int noEdge=65535;
class Traveling
{public:void BackTrack(int i);int n; //圖G的頂點數(shù) int *x; //當(dāng)前的解 int *bestx; // 當(dāng)前的最優(yōu)解 int **a; // 圖G的臨界矩陣 int cc; // 當(dāng)前費用 int bestc; //當(dāng)前最優(yōu)花費的值 // 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<<"旅行售貨員問題的最優(yōu)路徑:";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<<"輸入城市的個數(shù)";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<<"輸入城市間存在的通路的個數(shù)";cin>>x;cout<<"輸入數(shù)據(jù)的形式為:(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<<"旅行售貨員問題的最優(yōu)值為:"<<TSP(vector,v,n)<<endl;}
總結(jié)
以上是生活随笔為你收集整理的算法设计与分析——回溯法——旅行售货员问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JetBrains 静态代码分析引擎 Q
- 下一篇: 算法设计与分析——回溯法——圆排列问题