导航:首页 > 源码编译 > 细化算法代码

细化算法代码

发布时间: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两个矩阵的值。

阅读全文

与细化算法代码相关的资料

热点内容
c窗口界面编程 浏览:21
hypermill编程能做模板吗 浏览:780
计算机网络最经典的算法 浏览:626
华为思科的配置命令 浏览:869
linux设置光盘启动 浏览:359
程序员俱乐部注册 浏览:17
洗洁精鸡蛋盘解压视频 浏览:291
企业内网加密app 浏览:49
腾讯云服务器怎么设置本地网络 浏览:623
日常程序员 浏览:513
哪个pe有bit加密功能 浏览:108
rust服务器是用什么ip 浏览:692
java随机字符串生成 浏览:551
数码宝贝编程人物 浏览:390
php多用户建站系统 浏览:624
加密防盗地上栓价位 浏览:671
比泽尔压缩机下载 浏览:420
深圳压缩机制造公司 浏览:882
如何给u盘单独文件加密码 浏览:285
恒温机故障源码 浏览:419