1樓:丙星晴
根據lz要求,最合適的是floyd演算法
下面就是根據這個演算法寫的**,lz可以自己改成函式d=[0 1 0 1 0 0
1 0 1 0 0 0
0 1 0 1 1 1
1 0 1 0 1 0
0 0 1 1 0 1
0 0 1 0 1 0];
n=length(d);
for k=1:n
for i=1:n
for j=1:n
if 0 d(i,j)=d(i,k)+d(k,j); else d(i,j)=min(d(i,j),d(i,k)+d(k,j)); endend endend end答案就儲存在d矩陣當中,這裡 d =0 1 2 1 2 31 0 1 2 2 22 1 0 1 1 11 2 1 0 1 22 2 1 1 0 13 2 1 2 1 0演算法為o(n3)的,256^3=2^24 大概等於1600萬效率上完全能夠忍受。 2樓:匿名使用者 好好看看運籌學裡的鄰接矩陣、權矩陣 在matlab中怎樣求矩陣中任意兩點間的距離呢 3樓:匿名使用者 根據lz要求,最合適的是floyd演算法 下面就是根據這個演算法寫的**,lz可以自己改成函式d=[0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 0]; n=length(d); for k=1:n for i=1:n for j=1:n if 0 d(i,j)=d(i,k)+d(k,j); else d(i,j)=min(d(i,j),d(i,k)+d(k,j)); endend endend end答案就儲存在d矩陣當中,這裡 d =0 1 2 1 2 31 0 1 2 2 22 1 0 1 1 11 2 1 0 1 22 2 1 1 0 13 2 1 2 1 0演算法為o(n3)的,256^3=2^24 大概等於1600萬效率上完全能夠忍受。 4樓:風地觀的骨架 我們老師給的標準程式,我原封不動送給你吧,系統地講最短路問題的,要用在你的矩陣的情況的話記得把你裡面0全改成inf,耐心看吧,闡述得很完整了,絕對是個高效的演算法: dijkstra演算法 edser dijkstra 是荷蘭計算機科學家,於2023年發表了dijkstra演算法,時年29歲. 這演算法計算具有非負權的n階矩陣w的圖上從源點s(source), s(1..n), 出發到達所有各點k, k=1.. n, 的最短路。(edward f. moore 在2023年也得到類似的演算法). 演算法1. 對每個點i指定乙個離點s的距離初始值l(i). 在始點s的值為零, 即l(s)=0,其它點的值為inf. 2. 所有的點標記為未走訪的. 置始點s為當前點c. 3. 對於當前點c, 考慮它的所有未走訪的相鄰點j, 並更新j的距離值為 l(j)=min(l(j), l(c)+w(c,j)) 4. 把當前點c標記為走訪過的點. 走訪過的點c的距離l(c)就是點s到c的最短距離, 而且以後不再檢查走訪過得點了. 5. 如果所有的點都是走訪過的點, 完成. 不然, 把未走訪的點中具有最小距離值的點作為下乙個當前點c, 轉步驟3. 編制程式的要求: 給定n階非負權矩陣w, w(i,j)是從點i到點j的距離, w(i,i)的值可以賦以任意值(比較方便的是賦以inf). 如果只需求源點s(source)到達指定的終點t(target),給出最短路徑z及其長度l(t); 如果不指定終點t時,z是乙個n維行向量,z(k)表示s點到k點的最短路上k點的前一點, z(s)=0, l是乙個n維行向量, l(k)是s點到k點的最短距離. 如果不給出源點s及終點t, 則預設源點s=1, 按不指定終點的情況辦. matlab函式子程式dijkstra.m為: function [l,z]=dijkstra(w,s,t) %用 dijkstra 演算法求最短路,w(i,j)是從點 i 到點 j 的距離, w(i,i)=0,i,j=1..n; 點 i 和點 j 無邊直接相連時,w(i,j)=inf. % l表示從始點 s 到終點 t 的最短距離, z 表示點 s 到 t 的一條最短路徑. 當不給出終點 t 時,l(j)表示從點 s 到點 j 的最短距離, j=1..n; z(i)表示最短路徑上點 i 的前一點(父親點), % 可由 z 追溯最短路徑,當不給出起點 s 及終點 t 時預設 s = 1 及按不指定終點的情況辦. if nargin<2 s=1;t=0; elseif nargin<3 t=0; end;%如只給出w, 預設始點 s=1;算出s到所有點的距離; 如沒給出終點, 算出s到所有點的距離; n=length(w(:,1));%頂點數 l=inf*ones(1,n);,l(s)=0;%l賦初值,在s點為0,其它點為inf c=s; %當前點為始點s q=1:n;% 未走訪的頂點集 z=s*ones(1,n); z(s)=0;% z賦初值,因始點 s 無父親點,故把 s 點的z值改為0 for k=1:n % 更新 l 和 z 的迴圈 q=setdiff(q,c); %當前點 c 未走訪的點集 [l(q),ind]=min([l(q);l(c)+w(c,q)]);%當前點c已走訪了所有的相鄰的未走訪的點,更新 l z(q(find(ind==2)))=c; %更新z, 至此c已是走訪過的點了 if t&c==t %若 c 點是終點 t, 不用再計算到其它未走訪的點的最短路 l=l(t); %最短路長; road=t;%最短路徑終點; while t~=s%追溯最短路徑上的點 t=z(t); road=[road,t]; endz=road(length(road):-1:1); %顛倒次序; return; end; [null, mc]=min(l(q)); if null==inf disp('到值是inf的點的路不通!'); z(find(l==inf))=nan; return; else c=q(mc);% 把未走訪的點集q中與始點距離最近的點作為新的當前點c; end;end; dijkstra演算法的證明: 以下實質上是用動態規劃思想的證明. 記第 k 階段開始時考慮的當前點為c(k),則第 k 階段完成時確定的當前點為c(k+1),記集合p(k)=, 記 q(k)為 p(k) 的餘集. 我們來證明對於每個點v∈p(k), l(v)是從源點s到點v點的最短路的長度, k=1..n. 證明:對 k 施行數學歸納法,當 k=1 時, p(1)=, v=s, l(v)=0, 命題真; 設對於k=m, m≥1, n≥m時命題真, 即當v∈p(m)時, l(v)是s到v的最短路的長度. 由於p(m+1)=p(m)∪, 所以只要證明 l(c(m+1))是點s到c(m+1)點的最短路的長度. 記 r:=c(1)..c(m+1) 是從 s=c(1) 到 c(m+1)的任意一條路, 記l(c(j);i)為在k=i階段, j>i時更新的l(c(j))的值. 則從 s 出發沿路 r 往 c(m+1)走時, 必存在第一條邊(c(i),c(j))使得c(i)∈p(m),c(j)∈q(m). 由歸納假設, 這條路 r 的長度w(r)≥l(c(i))+w(c(i),c(j))+w(c(j)..c(m+1)) ≥l(c(i))+w(c(i),c(j)). 按演算法,在第k=i階段完成時,l(c(i))+w(c(i),c(j))≥l(c(j);i). 因i≤m, 故l(c(j);i)≥l(c(j);m), 從而w(r)≥l(c(j);m). 由演算法, l(c(m+1))≤l(c(j);m); 故w(r)≥l(c(m+1)); 另外按演算法, 確有長度等於l(c(m+1))的一條路徑, 證畢. 5樓:匿名使用者 你看看下面這個程式是不是你要的。 matlab中已知各點的位置座標,也知道每點之間的鄰接矩陣,如何繪製出圖形 6樓:匿名使用者 使用gplot函式,很容易就能畫出圖 gplot(a,xy); a是鄰接矩陣,大小是nxn,(n個節點的鄰接矩陣)xy是各點的座標,是nx2的矩陣,存放n個點的x,y座標gplot會連根據a連線點 求助:兩個矩陣之間用乙個小圓圈連線是什麼運算 7樓:劉茂非律師 沒有這種符號,有可能是定義運算符號.你說的是不是矩陣乘法:矩陣乘法是一種高效的演算法 回可以把答一些一維遞推優化到log( n ),還可以求路徑方案等,所以更是是一種應用性極強的演算法.矩陣,是線性代數中的基本概念之一.乙個m×n的矩陣就是m×n個數排成m行n列的乙個數陣. 由於它把許多資料緊湊的集中到了一起,所以有時候可以簡便地表示一些複雜的模型. 求鄰接矩陣任意兩點間的最短距離。matlab。程式在下面有沒有哪位大神能給解釋一下後邊的是什麼意思
50 8樓:匿名使用者 用floyd演算法也可以,另外乙個取巧的方法是把plus過載成min,mtimes過載成plus,然後直接把鄰接矩陣求n次方(n是結點個數)就行了 9樓:活寶上大夫 根據lz要求,最合適的是floyd演算法 下面就是根據這個演算法寫的**,lz可以自己改成函式d=[0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 0]; n=length(d); for k=1:n for i=1:n for j=1:n if 0 d(i,j)=d(i,k)+d(k,j); else d(i,j)=min(d(i,j),d(i,k)+d(k,j)); endend endend end答案就儲存在d矩陣當中,這裡 d =0 1 2 1 2 31 0 1 2 2 22 1 0 1 1 11 2 1 0 1 22 2 1 1 0 13 2 1 2 1 0演算法為o(n3)的,256^3=2^24 大概等於1600萬效率上完全能夠忍受。 x,y,z ndgrid 1 7 p x y z 獲得所copy有可能的3個數的排列 r p 1 p 2 p 2 p 3 p r,除去有連bai續值得排列a zeros 1,254 a 1 3 p 1,選取dup的第一行作為最開始三個數p 1,刪除掉該zhi行,不再允許該組合dao出現for ii ... 矩陣a 的意義 1 把a的每個元素都換成它的代數余子式 代數余子式定義 在乙個n級行列式d中,把元素第i行第j列元素aij i,j 1,2,n 所在的行與列劃去後,剩下 的 n 1 2個元素按照原來的次序組成的乙個n 1階行列式mij,稱為元素aij的余子式,mij帶上符號 1 i j 稱 為aij... a 2,5 1,4 1,4 3,6 3,6 2,5 假設baia是你想du將1替換為zhi0的矩陣 a a 1 0 可將矩dao陣a中的1全部專替屬換為0 matlab怎麼能隨機的替換矩陣中的數,比如乙個0 1矩陣,把矩陣中的0隨機選幾個替換為1,不是全部替換 a是0 1矩陣 l find a t ...MATLAB如何生成這樣的矩陣 矩陣為1行254列,由1,2,3,4,5,6,7這幾個數字組成,組成規則是
矩陣A的意義,( 1)A與 A表示的意義有什麼區別?A是矩陣。雖然( 1)A A。
matlab如何將矩陣中的1逐個替換為