通過圖(無向圖或有向圖)中所有邊一次且僅一次行遍圖中所有頂點的通路稱為
尤拉通路,通過圖中所有邊一次且僅一次行遍所有頂點的迴路稱為
尤拉迴路。具有
尤拉迴路的圖稱為尤拉圖(euler
graph),具有尤拉通路而無尤拉迴路的圖稱為半尤拉圖。
和哈密頓迴路相比,哈密頓迴路是所有點僅僅經歷一次。
郵遞員問題:至少經過街道一次,所以是用尤拉**決。
tsp(旅行商問題):至少經過每個點一次,則用哈密頓**決。
旅行商問題:
從北京(pe)乘飛機到東京(t)、紐約(n)、墨西哥城(m)、倫敦(l)、巴黎(pa)
五城市做旅遊,每城市恰去一次再回北京,應如何安排旅遊線,使旅程最短?各城市之
間的航線距離如表7。
表7 六城市間的距離
l m n pa pe t
l 56 35 21 51 60
m 56 21 57 78 70
n 35 21 36 68 68
pa 21 57 36 51 61
pe 51 78 68 51 13
t 60 70 68 61 13
則可編寫程式:
main.m
clc,clear
global a
a=zeros(6);
a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60;
a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70;
a(3,4)=36;a(3,5)=68;a(3,6)=68; a(4,5)=51;a(4,6)=61;
a(5,6)=13; a=a+a'; l=size(a,1);
c1=[5 1:4 6];%起點是5然後按照順序是第乙個初始圈
[circle,long]=modifycircle(c1,l);
c2=[5 6 1:4];%改變初始圈,該演算法的最後乙個頂點不動
[circle2,long2]=modifycircle(c2,l);
if long2
circle;long;
子函式modifycircle.m
function [circle,long]=modifycircle(c1,l)
global a
flag=1;
while flag>0
flag=0;
for m=1:l-3
for n=m+2:l-1
if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<...>
a(c1(m),c1(m+1))+a(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
endend
endend
long=a(c1(1),c1(l));
for i=1:l-1
long=long+a(c1(i),c1(i+1));
endcircle=c1;
結果:
旅行商問題
旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...
旅行商問題
一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...
旅行商問題
題意 旅行商問題,即從 1 走到 n 不重不漏,然後求最小距離。題解 狀態壓縮dp,顯然的是,要從某種狀態到某種狀態並且合法,然後取 min 然後全部遍歷。所以設 dp 的含義是,最後乙個點是 i 點,然後走過了 j 這個 01 串的有 1 的點。然後要想的是順序問題,那麼我們必然是從上乙個點推到 ...