国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【回溯算法】旅行商問題--TSP問題

這篇具有很好參考價值的文章主要介紹了【回溯算法】旅行商問題--TSP問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【問題描述】

一銷售商從n個城市中的某一城市出發(fā),不重復(fù)地走完其余n—1個城市并回到原出發(fā)點(diǎn),在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發(fā)。

輸入

對每個測試?yán)?行有兩個整數(shù):n(4≤n≤10)和m(4≤m≤20 ) ,n是結(jié)點(diǎn)數(shù),m是邊數(shù)。

接下來m行,描述邊的關(guān)系,每行3個整數(shù):(i,j),length,表示結(jié)點(diǎn)i到結(jié)點(diǎn)j的長度是length。

當(dāng)n=0時,表示輸入結(jié)束。

輸出

對每個測試?yán)?,輸出最短路徑長度所經(jīng)歷的結(jié)點(diǎn),最短的長度。

輸入樣例

4 6

1 2 20

1 4 4

1 3 6

2 3 5

2 4 10

3 4 15

0

輸出樣例

1 3 2 4

25

【算法分析】

旅行商問題的解空間是一棵排列樹。 開始時,x={1,2,…,n},相應(yīng)的排列樹由x的全排列構(gòu)成。

TSP問題(Traveling Salesman Problem)通常稱為旅行商問題,也稱為旅行售貨員問題、貨擔(dān)郎問題等,是組合優(yōu)化中的著名難題,也是計(jì)算復(fù)雜性理論、圖論、運(yùn)籌學(xué)、最優(yōu)化理論等領(lǐng)域中的一個經(jīng)典問題,具有廣泛的應(yīng)用背景。

問題的一般描述為:旅行商從n個城市中的某一城市出發(fā),經(jīng)過每個城市僅有一次,最后回到原出發(fā)點(diǎn),在所有可能的路徑中求出路徑長度最短的一條。

設(shè)G=(V, E)是一個帶權(quán)圖,其每一條邊(u, v)∈E的費(fèi)用(權(quán))為正數(shù)w(u, v)。目的是要找出G的一條經(jīng)過每個頂點(diǎn)一次且僅經(jīng)過一次的回路,即漢密爾頓(Hamilton)回路v1,v2 ,…,vn ,使回路的總權(quán)值最小:【回溯算法】旅行商問題--TSP問題

【回溯算法】旅行商問題--TSP問題?文章來源地址http://www.zghlxwxcb.cn/news/detail-481171.html

【代碼部分】?

//旅行商問題回溯算法的數(shù)據(jù)結(jié)構(gòu)

#define NUM 100
int n;				//圖G的頂點(diǎn)數(shù)量
int m;				//圖G的邊數(shù)
int a[NUM][NUM];		//圖G的鄰接矩陣
int x[NUM];			//當(dāng)前解
int bestx[NUM];		//當(dāng)前最優(yōu)解向量
int cc;				//當(dāng)前費(fèi)用
int bestc;			//當(dāng)前最優(yōu)值
int NoEdge = -1;		//無邊標(biāo)記
//在構(gòu)造鄰接矩陣a時,其初始值應(yīng)為NoEdge:
for (i=0; i<NUM; i++)
  for (j=1; j<NUM; j++)
    a[i][j] = NoEdge;

//最優(yōu)值和向量x的初始化數(shù)值如下:
bestc = NoEdge;
for(i=1; i<=n; i++)
  x[i] = i;
//旅行商問題回溯算法的實(shí)現(xiàn)
//形參t是回溯的深度,從2開始
void Backtrack(int t)
{
  //到達(dá)葉子結(jié)點(diǎn)的父結(jié)點(diǎn)
  if(t==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 i=1; i<=n; i++)
        bestx[i] = x[i];
      bestc = cc + a[x[n-1]][x[n]] + a[x[n]][1];
    }
    return;
  }
else 
  {
    for(int i=t; i<=n; i++)
    {
      if(a[x[t-1]][x[i]]!= NoEdge &&
        (cc + a[x[t-1]][x[i]]< bestc||bestc == NoEdge))
      {
        swap(x[t],x[i]);
        cc += a[x[t-1]][x[t]];
        Backtrack(t+1);
        cc -= a[x[t-1]][x[t]];
        swap(x[t],x[i]);
      }
    }
  }
}

//完整實(shí)現(xiàn)
#include <iostream>
using namespace std;

#define NUM 100
int n;
int m;
int a[NUM][NUM];
int x[NUM];
int bestx[NUM];
int cc;
int bestc;
int NoEdge = -1;

void Backtrack(int t)
{
	if(t==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 i=1; i<=n; i++)
				bestx[i] = x[i];
			bestc = cc + a[x[n-1]][x[n]] + a[x[n]][1];
		}
		return;
	}
	else 
	{
		for(int i=t; i<=n; i++)
		{
			if(a[x[t-1]][x[i]]!= NoEdge &&
				(cc + a[x[t-1]][x[i]]< bestc||bestc == NoEdge)) 
			{
				swap(x[t],x[i]);
				cc += a[x[t-1]][x[t]];
				Backtrack(t+1);
				cc -= a[x[t-1]][x[t]];
				swap(x[t],x[i]);
			}
		}
	}
}

int main() 
{
	int i, j;
	int from, to, length;
	while (scanf("%d%d", &n, &m) && n) 
	{
		for (i=0; i<NUM; i++)
			for (j=1; j<NUM; j++)
				a[i][j] = NoEdge;
		for (i=0; i<m; i++)
		{
			scanf("%d%d%d", &from, &to, &length);
			a[from][to] = length;
			a[to][from] = length;
		}
		bestc = NoEdge;
		for(i=1; i<=n; i++)
			x[i] = i;
		Backtrack(2);
		for(j=1; j<=n; j++)
			printf("%d ", bestx[j]);
		printf("\n%d\n", bestc);
	}	
	return 0;
}

到了這里,關(guān)于【回溯算法】旅行商問題--TSP問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++動態(tài)規(guī)劃解決TSP(旅行商)問題

    C++動態(tài)規(guī)劃解決TSP(旅行商)問題

    題目描述: 某旅行商希望從某城市出發(fā)經(jīng)過一系列的城市最后再回到出發(fā)的城市。這些城市之間均可直航,他希望只經(jīng)過這些城市一次且旅行的總線路最短。設(shè)有n個城市,城市的編號從1到n。 輸入第一行為整數(shù)n,表示城市的數(shù)量。其后n行,每行有n個整數(shù),用空格隔開,表

    2024年02月03日
    瀏覽(38)
  • 旅行商問題 Traveling Salesman Problem(TSP)

    旅行商問題 Traveling Salesman Problem(TSP)

    一個商人從一點(diǎn)出發(fā),經(jīng)過所有點(diǎn)后返回原點(diǎn)。 目標(biāo):經(jīng)過所有點(diǎn)的最短路程。 約束: 1,除起點(diǎn)和終點(diǎn)外,所有點(diǎn)當(dāng)且僅當(dāng)經(jīng)過一次; 2,起點(diǎn)與終點(diǎn)重合;所有點(diǎn)構(gòu)成一個連通圖 圖論解釋:該問題實(shí)質(zhì)是在一個帶權(quán)完全無向圖中,找一個權(quán)值最小的哈密爾頓回路 哈密爾

    2024年02月03日
    瀏覽(22)
  • 旅行商問題(TSP)及Python圖論求解

    旅行商問題(Traveling Salesman Problem, TSP)是指給定一個城市的集合以及每兩個城市之間的距離,找到一條經(jīng)過每個城市恰好一次且路徑最短的回路。 可以想象成一個旅行商要拜訪多個城市,問他如何安排路線,使得行程最短。這個問題可能看起來簡單,但是隨著城市數(shù)量的增

    2024年02月12日
    瀏覽(15)
  • Hopfield神經(jīng)網(wǎng)絡(luò)求解旅行商(TSP)問題matlab代碼

    Hopfield神經(jīng)網(wǎng)絡(luò)求解旅行商(TSP)問題matlab代碼

    ????????1.網(wǎng)絡(luò)結(jié)構(gòu) ????????連續(xù)Hopfield神經(jīng)網(wǎng)絡(luò)(Continuous Hopfield Neural Network,CHNN)的拓?fù)浣Y(jié)構(gòu)和離散Hopfield神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)類似,如圖11-1所示。連續(xù)Hopfield網(wǎng)絡(luò)和離散Hopfield 網(wǎng)絡(luò)的不同點(diǎn)在于其傳遞函數(shù)不是階躍函數(shù),而是連續(xù)函數(shù)。 ????????與離散型Hopfield神經(jīng)網(wǎng)絡(luò)不

    2024年02月14日
    瀏覽(16)
  • 強(qiáng)化學(xué)習(xí)求解TSP:Qlearning求解旅行商問題(Traveling salesman problem, TSP)提供Python代碼

    強(qiáng)化學(xué)習(xí)求解TSP:Qlearning求解旅行商問題(Traveling salesman problem, TSP)提供Python代碼

    Q-learning是一種強(qiáng)化學(xué)習(xí)算法,用于解決基于獎勵的決策問題。它是一種無模型的學(xué)習(xí)方法,通過與環(huán)境的交互來學(xué)習(xí)最優(yōu)策略。Q-learning的核心思想是通過學(xué)習(xí)一個Q值函數(shù)來指導(dǎo)決策,該函數(shù)表示在給定狀態(tài)下采取某個動作所獲得的累積獎勵。 Q-learning的訓(xùn)練過程如下: 1. 初

    2024年02月03日
    瀏覽(19)
  • python實(shí)現(xiàn)大規(guī)模鄰域搜索(LNS)求解旅行商問題(TSP)

    python實(shí)現(xiàn)大規(guī)模鄰域搜索(LNS)求解旅行商問題(TSP)

    參考《Handbook of Metaheuristics (Third Edition)》中的Large neighborhood search章節(jié), 建議直接閱讀英文原版 大規(guī)模鄰域搜索(LNS) 屬于超大鄰域搜索(Very Large-Scale Neighborhood Search, VLNS)的一類 ,隨著算例規(guī)模的增大,鄰域搜索算法的鄰域規(guī)模呈指數(shù)增長或者當(dāng)鄰域太大而不能在實(shí)際中明確搜索

    2024年02月08日
    瀏覽(18)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項(xiàng)目:助農(nóng)農(nóng)產(chǎn)品銷售商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項(xiàng)目:助農(nóng)農(nóng)產(chǎn)品銷售商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計(jì)答辯。 項(xiàng)目配有對應(yīng)開發(fā)文檔、

    2024年02月20日
    瀏覽(104)
  • 回溯法--旅行售貨員問題--排列樹

    回溯法--旅行售貨員問題--排列樹

    回溯法有點(diǎn)類似于 暴力枚舉 的搜索過程,回溯法的基本思想是按照深度優(yōu)先搜索的策略,從根節(jié)點(diǎn)出發(fā)深度搜索解空間樹,當(dāng)搜索到某一節(jié)點(diǎn)時,如果該節(jié)點(diǎn)可能包含問題的解,則繼續(xù)向下搜索;反之回溯到其祖先節(jié)點(diǎn),嘗試其他路徑搜索。 第一類問題:只要求求得一個可

    2024年02月05日
    瀏覽(16)
  • 基于回溯法求解旅行售貨員問題

    基于回溯法求解旅行售貨員問題

    一、實(shí)驗(yàn)?zāi)康?1.掌握基于回溯的算法求解旅行商問題的原理。 2.掌握編寫回溯法求解旅行商問題函數(shù)的具體步驟并理解回溯法的核心思想以及其求解過程。 3.掌握子集樹以及其他幾種解空間樹的回溯方法并具備運(yùn)用回溯算法的思想設(shè)計(jì)算法并用于求解其他實(shí)際應(yīng)用問題的能力

    2024年02月09日
    瀏覽(13)
  • 旅行商問題(枚舉,回溯,動態(tài)規(guī)劃,貪心,分支界限)

    旅行商問題(枚舉,回溯,動態(tài)規(guī)劃,貪心,分支界限)

    假設(shè)有一個貨郎擔(dān)要拜訪n個城市,他必須選擇所要走的路程,路程的限制時每個城市只能拜訪一次,而且最后要走到原來出發(fā)的城市,要求路徑長度。 旅行商問題將要走過的城市建立成一個完全圖。稠密圖,所以用臨接矩陣來存。 由于路徑的特殊性,可以正走也可以反著走

    2024年02月04日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包