導航:首頁 > 源碼編譯 > 細化演算法代碼

細化演算法代碼

發布時間:2024-07-13 07:17:42

Ⅰ 鍩轟簬matlab鎸囩汗璇嗗埆綆楁硶鐨勫疄鐜拌В鏋


鎸囩汗璇嗗埆鎶鏈錛屼互鍏舵櫘閬嶆с佸敮涓鎬у拰紼沖畾鎬э紝宸叉垚涓哄叕璁ょ殑韜浠借よ瘉鍒╁櫒銆傚湪瀹炵幇涓錛屾瘡涓姝ラら兘鑷沖叧閲嶈侊紝鎴戜滑閫氳繃MATLAB綺懼績璁捐′簡涓濂楁寚綰硅瘑鍒綆楁硶嫻佺▼銆


棣栧厛錛屾寚綰瑰浘鍍忕粡榪囩簿蹇冮勫勭悊錛屽寘鎷鍒嗗壊銆婊ゆ嘗錛坉ouble(Icc))</銆佷簩鍊煎寲鍜岀粏鍖栨搷浣溿傜粏鍖栬繃紼嬮噰鐢ㄨ嚜瀹氫箟鍑芥暟P鍜宲oint錛岀『淇濈粏鑺傛竻鏅般傛帴鐫錛岀壒寰佹彁鍙栨垚涓哄叧閿錛岄氳繃瀵繪壘絝鐐癸紙plot(pxy2(:,1),pxy2(:,2),'r.'</錛夊拰鍒嗗弶鐐癸紝鍘婚櫎杈圭紭絝鐐癸紝紜淇濆尮閰嶇簿搴︺


鐗瑰緛鍖歸厤閲囩敤澶氶」鍑嗗垯錛屽傝剨綰塊暱搴﹀尮閰嶏紙sum(abs((dd1./dd2)-1))</錛夛紝閫氳繃闀垮害姣斾緥鍒ゆ柇鏄鍚﹀尮閰嶏紱涓夎掑艦杈歸暱鍖歸厤錛岄氳繃璁$畻涓ょ偣闂磋窛紱繪瀯鎴愪笁瑙掑艦鐨勮竟闀匡紝ff</鍊兼帴榪0琛ㄧず鍖歸厤錛涚偣綾誨瀷姣斾緥錛fff</錛夐氳繃緇熻$鐐瑰拰浜ゅ弶鐐癸紝褰揻ff鍊兼帴榪0鏃訛紝璁や負鐗瑰緛鐐瑰尮閰嶃傛墍鏈夋潯浠舵弧瓚籌紝鍖歸厤鎴愬姛銆


涓誨嚱鏁頒腑錛屾垜浠涓嶄粎灞曠ず浜嗘寚綰歸噰闆嗕笌棰勫勭悊鐨勫畬鏁存祦紼嬶紝榪樼粨鍚圙UI鐣岄潰錛岀洿瑙傚湴灞曠ず浜嗚瘑鍒榪囩▼錛屽plot(pxy31(:,1),pxy31(:,2),'ro')</plot(pxy32(:,1),pxy32(:,2),'ro')</鎵紺恆




閫氳繃榪欎簺綺懼績緙栧啓鐨凪ATLAB浠g爜鐗囨碉紝鎴戜滑鍙浠ユ竻妤氬湴鐪嬪埌姣忎釜姝ラょ殑鎵ц岀粏鑺傚拰緇撴灉楠岃瘉銆傛瘡涓鍑芥暟濡係ingle_point銆乄alk銆丩ast1鍜孌istance閮界簿紜鍦版墽琛屽叾浠誨姟錛岀『淇濅簡綆楁硶鐨勯珮鏁堟у拰鍑嗙『鎬с傚湪鏁翠釜鎸囩汗璇嗗埆榪囩▼涓錛toc</鏍囩劇敤浜庢祴閲忓拰璁板綍榪愯屾椂闂達紝浣撶幇綆楁硶鐨勫疄鏃舵с



閫氳繃榪欎簺鏀瑰啓錛屾垜浠鏃淇濇寔浜嗗師鏂囩殑鎶鏈緇嗚妭錛屽張鎻愬崌浜嗘枃絝犵殑鍙璇繪у拰鍚稿紩鍔涳紝紿佸嚭浜哅ATLAB鎸囩汗璇嗗埆綆楁硶鐨勬牳蹇冩ラゅ拰鍏抽敭鍔熻兘銆

Ⅱ 什麼是Prim演算法

Prim演算法
Prim演算法用於求無向圖的最小生成樹

設圖G =(V,E),其生成樹的頂點集合為U。
①、把v0放入U。
②、在所有u∈U,v∈V-U的邊(u,v)∈E中找一條最小權值的邊,加入生成樹。
③、把②找到的邊的v加入U集合。如果U集合已有n個元素,則結束,否則繼續執行②。
其演算法的時間復雜度為O(n^2)

Prim演算法實現:
(1)集合:設置一個數組set[i](i=0,1,..,n-1),初始值為 0,代表對應頂點不在集合中(注意:頂點號與下標號差1)
(2)圖用鄰接陣表示,路徑不通用無窮大表示,在計算機中可用一個大整數代替。

參考程序

/* Prim.c

Copyright (c) 2002, 2006 by ctu_85

All Rights Reserved.

*/

/* The impact of the situation of articulation point exists can be omitted in Prim algorithm but not in Kruskal algorithm */

#include "stdio.h"

#define maxver 10

#define maxright 100

int main()

{

int G[maxver][maxver],in[maxver]=,path[maxver][2];

int i,j,k,min=maxright;

int v1,v2,num,temp,status=0,start=0;

restart:

printf("Please enter the number of vertex(s) in the graph:\n");

scanf("%d",&num);

if(num>maxver||num<0)

{

printf("Error!Please reinput!\n");

goto restart;

}

for(j=0;j<num;j++)

for(k=0;k<num;k++)

{

if(j==k)

G[j][k]=maxright;

else

if(j<k)

{

re:

printf("Please input the right between vertex %d and vertex %d,if no edge exists please input -1:\n",j+1,k+1);

scanf("%d",&temp);

if(temp>=maxright||temp<-1)

{

printf("Invalid input!\n");

goto re;

}

if(temp==-1)

temp=maxright;

G[j][k]=G[k][j]=temp;

}

}

for(j=0;j<num;j++)

{

status=0;

for(k=0;k<num;k++)

if(G[j][k]<maxright)

{

status=1;

break;

}

if(status==0)

break;

}

do

{

printf("Please enter the vertex where Prim algorithm starts:");

scanf("%d",&start);

}while(start<0||start>num);

in[start-1]=1;

for(i=0;i<num-1&&status;i++)

{

for(j=0;j<num;j++)

for(k=0;k<num;k++)

if(G[j][k]<min&&in[j]&&(!in[k]))

{

v1=j;

v2=k;

min=G[j][k];

}

if(!in[v2])

{

path[i][0]=v1;

path[i][1]=v2;

in[v1]=1;

in[v2]=1;

min=maxright;

}

}

if(!status)

printf("We cannot deal with it because the graph is not connected!\n");

else

{

for(i=0;i<num-1;i++)

printf("Path %d:vertex %d to vertex %d\n",i+1,path[i][0]+1,path[i][1]+1);

}

return 1;

}

Prim演算法。

設圖G =(V,E),其生成樹的頂點集合為U。

①、把v0放入U。

②、在所有u∈U,v∈V-U的邊(u,v)∈E中找一條最小權值的邊,加入生成樹。

③、把②找到的邊的v加入U集合。如果U集合已有n個元素,則結束,否則繼續執行②。

其演算法的時間復雜度為O(n^2)

參考程序

//Prim 演算法 讀入頂點數(n)、邊數(m),邊的起始點和權值 用鄰接矩陣儲存

//例如

//7 12 (7個頂點12條邊)

//1 2 2

//1 4 1

//1 3 4

//2 4 3

//2 5 10

//3 4 2

//4 5 7

//3 6 5

//4 6 8

//4 7 4

//5 7 6

//6 7 1

#include <stdio.h>

#include <string.h>

int main()

{

int m , n;

int a[201][201] , mark[201] , pre[201] , dist[201];

int s , t , w;

int i , j , k , min , tot;

freopen("Prim.txt" , "r" , stdin);

//讀入數據

memset(a , 0 , sizeof(a));

scanf("%d %d" , &n , &m);

for (i = 0; i < m; i ++)

{

scanf("%d %d %d" , &s , &t , &w);

a[s][t] = w; a[t][s] = w;

}

//賦初值

memset(mark , 0 , sizeof(mark));

memset(pre , 0 , sizeof(pre));

memset(dist , 9999 , sizeof(dist));

dist[1] = 0;

//Prim

for (i = 1; i <= n; i ++)

{

min = 9999; k = 0;

for (j = 1; j <= n; j ++)

if ((mark[j] == 0) && (dist[j] < min)) {min = dist[j]; k = j;}

if (k == 0) break;

mark[k] = 1;

for (j = 1; j <= n; j ++)

if ((mark[j] == 0) && (a[k][j] < dist[j]) && (a[k][j] > 0))

{

dist[j] = a[k][j];

pre[j] = k;

}

}

tot = 0;

for (i = 1; i <= n; i ++) tot += dist[i];

printf("%d\n" , tot);

return 0;

}

Ⅲ 用c語言實現兩個矩陣相乘怎麼做

1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。

閱讀全文

與細化演算法代碼相關的資料

熱點內容
華為思科的配置命令 瀏覽:869
linux設置光碟啟動 瀏覽:359
程序員俱樂部注冊 瀏覽:17
洗潔精雞蛋盤解壓視頻 瀏覽:291
企業內網加密app 瀏覽:49
騰訊雲伺服器怎麼設置本地網路 瀏覽:623
日常程序員 瀏覽:513
哪個pe有bit加密功能 瀏覽:108
rust伺服器是用什麼ip 瀏覽:692
java隨機字元串生成 瀏覽:551
數碼寶貝編程人物 瀏覽:390
php多用戶建站系統 瀏覽:624
加密防盜地上栓價位 瀏覽:671
比澤爾壓縮機下載 瀏覽:420
深圳壓縮機製造公司 瀏覽:882
如何給u盤單獨文件加密碼 瀏覽:284
恆溫機故障源碼 瀏覽:418
如何打開管家婆伺服器支持者 瀏覽:266
安卓手機自帶瀏覽器有什麼用 瀏覽:532
老闆咨詢阿里雲還是獨立伺服器 瀏覽:814