中國(guó)郵遞員問題matlab_第1頁(yè)
中國(guó)郵遞員問題matlab_第2頁(yè)
中國(guó)郵遞員問題matlab_第3頁(yè)
中國(guó)郵遞員問題matlab_第4頁(yè)
中國(guó)郵遞員問題matlab_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上%中國(guó)郵遞員問題:%step1;%求出奇點(diǎn)之間的距離;%求各個(gè)點(diǎn)之間的最短距離;%floyd算法;clear all;clc;A=zeros(9);A(1,2)=3; A(1,4)=1; A(2,4)=7; A(2,5)=4;A(2,6)=9;A(2,3)=2; A(3,6)=2A(4,7)=2; A(4,8)=3;A(4,5)=5;A(5,6)=8; A(6,9)=1;A(6,8)=6;A(7,8)=2;A(8,9)=2;c=A+A'c(find(c=0)=inf;m=length(c);Path=zeros(m);for k=1:m for i=1:m f

2、or j=1:m if c(i,j)>c(i,k)+c(k,j) c(i,j)=c(i,k)+c(k,j); Path(i,j)=k; end end endendc, Pathh1=c(2,4);h2=c(2,6);h3=c(2,5);h4=c(4,6);h5=c(4,5);h6=c(6,5);h=h1,h2,h3,h4,h5,h6%step2;%找出以奇點(diǎn)為頂點(diǎn)的完全圖的最優(yōu)匹配;%算法函數(shù)Hung_Al.mfunction Matching,Cost = Hung_Al(Matrix) Matching = zeros(size(Matrix); % 找出每行和每列相鄰的點(diǎn)數(shù) nu

3、m_y = sum(isinf(Matrix),1); num_x = sum(isinf(Matrix),2); % 找出每行和每列的孤立點(diǎn)數(shù) x_con = find(num_x=0); y_con = find(num_y=0); %將矩陣壓縮、重組 P_size = max(length(x_con),length(y_con); P_cond = zeros(P_size); P_cond(1:length(x_con),1:length(y_con) = Matrix(x_con,y_con); if isempty(P_cond) Cost = 0; return end% 確保

4、存在完美匹配,計(jì)算矩陣邊集 Edge = P_cond; Edge(P_cond=Inf) = 0; cnum = min_line_cover(Edge); Pmax = max(max(P_cond(P_cond=Inf); P_size = length(P_cond)+cnum; P_cond = ones(P_size)*Pmax; P_cond(1:length(x_con),1:length(y_con) = Matrix(x_con,y_con);%主函數(shù)程序,此處將每個(gè)步驟用switch命令進(jìn)行控制調(diào)用步驟函數(shù) exit_flag = 1; stepnum = 1; whil

5、e exit_flag switch stepnum case 1 P_cond,stepnum = step1(P_cond); case 2 r_cov,c_cov,M,stepnum = step2(P_cond); case 3 c_cov,stepnum = step3(M,P_size); case 4 M,r_cov,c_cov,Z_r,Z_c,stepnum = step4(P_cond,r_cov,c_cov,M); case 5 M,r_cov,c_cov,stepnum = step5(M,Z_r,Z_c,r_cov,c_cov); case 6 P_cond,stepn

6、um = step6(P_cond,r_cov,c_cov); case 7 exit_flag = 0; end endMatching(x_con,y_con) = M(1:length(x_con),1:length(y_con);Cost = sum(sum(Matrix(Matching=1);%下面是6個(gè)步驟函數(shù)step1step6%步驟1:找到包含0最多的行,從該行減去最小值function P_cond,stepnum = step1(P_cond) P_size = length(P_cond); for ii = 1:P_size rmin = min(P_cond(ii,

7、:); P_cond(ii,:) = P_cond(ii,:)-rmin; end stepnum = 2;%步驟2:在P-cond中找一個(gè)0,并找出一個(gè)以該數(shù)0為星型的覆蓋function r_cov,c_cov,M,stepnum = step2(P_cond)%定義變量 r-cov,c-cov分別表示行或列是否被覆蓋 P_size = length(P_cond); r_cov = zeros(P_size,1); c_cov = zeros(P_size,1); M = zeros(P_size); for ii = 1:P_size for jj = 1:P_size if P_co

8、nd(ii,jj) = 0 && r_cov(ii) = 0 && c_cov(jj) = 0 M(ii,jj) = 1; r_cov(ii) = 1; c_cov(jj) = 1; end end end % 重初始化變量 r_cov = zeros(P_size,1); c_cov = zeros(P_size,1); stepnum = 3;%步驟3:每列都用一個(gè)0構(gòu)成的星型覆蓋,如果每列都存在這樣的覆蓋,則M為最大匹配function c_cov,stepnum = step3(M,P_size) c_cov = sum(M,1); if sum(c_c

9、ov) = P_size stepnum = 7; else stepnum = 4; end%步驟4:找一個(gè)未被覆蓋的0且從這出發(fā)點(diǎn)搜尋星型0覆蓋。如果不存在,轉(zhuǎn)步驟5,否%則轉(zhuǎn)步驟6function M,r_cov,c_cov,Z_r,Z_c,stepnum = step4(P_cond,r_cov,c_cov,M)P_size = length(P_cond);zflag = 1;while zflag row = 0; col = 0; exit_flag = 1; ii = 1; jj = 1; while exit_flag if P_cond(ii,jj) = 0 &&a

10、mp; r_cov(ii) = 0 && c_cov(jj) = 0 row = ii; col = jj; exit_flag = 0; end jj = jj + 1; if jj > P_size; jj = 1; ii = ii+1; end if ii > P_size; exit_flag = 0; end end if row = 0 stepnum = 6; zflag = 0; Z_r = 0; Z_c = 0; else M(row,col) = 2; if sum(find(M(row,:)=1) = 0 r_cov(row) = 1; zco

11、l = find(M(row,:)=1); c_cov(zcol) = 0; else stepnum = 5; zflag = 0; Z_r = row; Z_c = col; end endend%步驟5:function M,r_cov,c_cov,stepnum = step5(M,Z_r,Z_c,r_cov,c_cov) zflag = 1; ii = 1; while zflag rindex = find(M(:,Z_c(ii)=1); if rindex > 0 ii = ii+1; Z_r(ii,1) = rindex; Z_c(ii,1) = Z_c(ii-1); e

12、lse zflag = 0; end if zflag = 1; cindex = find(M(Z_r(ii),:)=2); ii = ii+1; Z_r(ii,1) = Z_r(ii-1); Z_c(ii,1) = cindex; end end for ii = 1:length(Z_r) if M(Z_r(ii),Z_c(ii) = 1 M(Z_r(ii),Z_c(ii) = 0; else M(Z_r(ii),Z_c(ii) = 1; end end r_cov = r_cov.*0; c_cov = c_cov.*0; M(M=2) = 0;stepnum = 3;% 步驟6:fu

13、nction P_cond,stepnum = step6(P_cond,r_cov,c_cov)a = find(r_cov = 0);b = find(c_cov = 0);minval = min(min(P_cond(a,b);P_cond(find(r_cov = 1),:) = P_cond(find(r_cov = 1),:) + minval;P_cond(:,find(c_cov = 0) = P_cond(:,find(c_cov = 0) - minval;stepnum = 4;function cnum = min_line_cover(Edge) r_cov,c_cov,M,stepnum = step2(Edge); c_cov,stepnum = step3(M,length(Edge); M,r_cov,c_cov,Z_r,Z_c,stepnum = step4(Edge,r_cov,c_cov,M);cnum = le

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論