MATLAB Floyd演算法的解釋

2021-10-10 04:51:57 字數 3422 閱讀 2302

%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%clc,clear %首先構造線路的距離矩陣

lk=xlsread

('datacumcm2011b.xls.',1

);

xl=xlsread

('datacumcm2011b.xls.',2

); xl=sort

(xl,2)

;%調整起點與終點的標號,小標號為起點,方便構造鄰接矩陣

%%%%%%%

%%%%

%按列的方向排序!!!!!!

%把線路的起點和終點編號變為座標

d(:,[1

,2])

=lk(xl

(:,1

),[2

,3])

;%矩陣d的第1,2列,為xl起點路口標號對應路口的座標 d(

:,[3

,4])

=lk(xl

(:,2

),[2

,3])

;%矩陣d的第3,4列,為xl終點路口標號對應路口的座標

dsd1=((

d(:,

1)-d

(:,3

)).^

2+(d

(:,2

)-d(

:,4)

).^2

).^(

1/2)

;%求每條線路的距離%%

%%%%

%%%%

%%%%

%%%%

%%%%

5dsd=

zeros

(582);

%路口的最大標號為582%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%一開始的矩陣dsd是個582

*582的0矩陣,下面進行替換dsd的部分元素:%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%for i=1:

size

(xl,1)

dsd(

xl(i,1)

,xl(i,2))

=dsd1

(i);

%構造距離矩陣

%%%%!!!!xl的第一列作為矩陣dsd中的元素dsd

(i,j)的i;%%

%%%%

%%%% xl的第一列作為矩陣dsd中的元素dsd

(i,j)的j;

end%

%%以上的!!!!!!!!!!!!!!!!!矩陣dsd是距離矩陣!!!!!!!!!!!!!!%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%距離矩陣與其轉置矩陣相加,再加上582

*582(與dsd行尺寸相同)單位矩陣:

size

(dsd,1)

%構造鄰接矩陣

a=dsd+dsd'+

eye(

size

(dsd,1)

);%對稱矩陣,同時讓對角線的元素為1%%

%%%%

%%%%

%%%%

%%%%為何加單位矩陣?%%

%%%%

%%%%

%答:因為要在a中find

(尋找)(a==

0)的元素,令等於0的元素替換為inf

(無窮),%%

%%%%

%%%%

%%%% 而對角線的0元素不需要替換,因為當i=j時,起點i到終點j的距離為0a(

find

(a==0)

)=inf;

%把矩陣a的0用inf

(無窮)替代

a=a-

eye(

size

(dsd,1)

);%把矩陣a對角線的元素變為0%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%弗洛伊德演算法:%%

%%%%

%%%%

%%%[d1,path]

=floyd

(a)%%%

%%%%

%%% a: 是帶權鄰接矩陣,在這裡 權 的 具體意義 是 距離%%

%%% d1: 最短路徑(這裡的路徑指的是距離)矩陣,%%

%%%%

%%%%

%%%%

% 其中的元素d1(i,j)的含義是:頂點i到頂點j的最短路徑(距離)值,即權;%%

%%%%

%%%%

%%%%

%%%%

%%%%

%% 矩陣d1記錄了所有頂點之間的最短路徑;%%

% path: 該矩陣的元素 path

(i,j) 記錄的是 頂點i 到 頂點j 經過的頂點標號path

(i,j); %%

%%%%

%%%% 我們應該注意到是,權的具體含義來自於開始時定義的距離矩陣,也就是說,權的具體含義由一開始算各頂點之間的「什麼」決定%%

%%%%

%%%%

%%假如我們一開始構造了各頂點的時間矩陣t,那麼[d1,path]

=floyd算出來的%%

%%%%

%%%%

%% d1是各頂點之間的最短時間(路徑)矩陣%%

%%%%

%%%%

% path是頂點i到頂點j的最短時間路徑的經過哪個頂點

[d1,path]

=floyd

(a);%%

%%%%

%%%%

%%%%

%步驟3:計算a區各路口與20交警平台最短距離,誰近歸誰管%%

%%for i=21:

92for j=1:

20;[l,r]

=router

(d1,path,j,i);w

(j)=

max(l)

; end

n(i)=

find

(w==

min(w));

endfor k=1:

20 b

=[k,

find

(n==k)];

%分配給平台k管理的路口

endb

A 演算法可行解與最優解的偏離處

a 尋路初探 f g h g的計算依賴於來自每個格仔與相鄰8個方向格仔的距離d,文中不同格仔的d1 8相同。如果s到v的最短路徑g是準確的,那麼最終獲得的最短路徑就是準確的,因為終點的g就是所求的最短路徑。任何情況第一和第二個加入關閉列表的g都是準確的,即其v到s的最短路徑是最優解。第三個開始才有可...

ACM 演算法題目解

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...

Rete演算法初解

rete匹配演算法是一種進行大量模式集合和大量物件集合間比較的高效方法,通過這種方法找出所有匹配各個模式的物件。rete演算法以犧牲記憶體換取高速的策略 rete演算法分為兩個部分 規則編譯 rule compilation 執行時執行 runtime execution 規則編譯 功能 如何在pr...