1樓:匿名使用者
在看嚴蔚敏的這個prim演算法之前,我是看的《演算法導論》上的prim演算法,感覺那個更容易理解prim演算法,只是嚴的有相應的步驟,可以照著實現,網上好多實現prim演算法的,貌似也是基於這個。那個closedge[j].lowcost是用來記錄v到u-v的權值的(v是已經選擇的邊,u是所有的邊,u-v是剩下的邊),在這裡可以找到v到u-v的最小權值。
你手邊應該有書吧,那我就對著嚴的書說了,對於v1有v2,v3,v4分別是6,1,5,這時可以存入陣列(對著那個p174的表),然後選了v3,這個時候就是需要更新closedge.lowcost,因為v2到v1是6而v2到v3是5,所以p175那邊的演算法倒數第六行的for迴圈就是用來更新這個的,因為對於新加入的點,可能會出現上面說的情況,其餘應該沒什麼問題的吧
實現prim演算法或kruscal演算法中的一種最小生成樹演算法
2樓:紫
prim演算法:
#include
#include
typedef int vrtype;
typedef char infotype;
#define max_name 3
/*頂點字串的最大長度+1*/
#define max_info 20
/*相關資訊字串的最大長度+1*/
typedef char vertextype[max_name];
#define infinity 32767
/*用整型最大值代替無窮大*/
#define max_vertex_num 20
/*最大頂點個數*/
typedef enum graphkind;
/**/
typedef int pathmatrix[max_vertex_num][max_vertex_num];
typedef int shortpathtable[max_vertex_num];
typedef struct
arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedef struct
mgraph;
int locatevex(mgraph g,vertextype u)
return k;
}void minispantree_prim(mgraph g,vertextype u)
}closedge[k].lowcost=0;
/*初始u=*/
printf("zuixiaodaijiashengchengshudegetiaobianwei:\n");
for(i=1;ivoid main()
3樓:昔英耀
誰能幫我畫個prim演算法的流程圖
4樓:匿名使用者
對於這種比較高階的演算法**直接看程式會比較蒙,你就光看我的演算法流程吧,prim演算法用的是貪心演算法的思想,即每一步都作出區域性的最優解,關於prim演算法為什麼能用貪心演算法的證明,你可以參考《計算機演算法設計與分析》這本書。(我反正不想看那麼無聊的證明,也看不明白,呵呵)。
定義一個集合v 和 a,其中v是全體節點(總節點數為n)的集合,v初始為空。定義一個記錄最小生成數邊數的變數c。
1.在v中任選一個節點,並加入到a中。在v中刪除該節點。
2.選一個在所有連線v集合和a集合權值最小的邊(即一個節點是v的某一個節點,一個是a中的某一個節點)
3。將兩個節點連線。將c加1
4.將第3步才在v中節點刪除並加入到a中.
5.如果c為n-1則完成最小生成樹,否則回到第2步。
明白了沒?不明白再問我啊,希望對你有所幫助。
最小生成樹演算法,急!
5樓:匿名使用者
已編譯確認,編譯環境vs2005/dev-cpp
#include/* int_max等 */
#include/* eof(=^z或f6),null */
#include
#include/* floor(),ceil(),abs() */
#define true 1
#define false 0
#define ok 1
#define error 0
typedef int status; /* status是函式的型別,其值是函式結果狀態**,如ok等 */
typedef int vrtype;
typedef char infotype;
#define max_name 3 /* 頂點字串的最大長度+1 */
#define max_info 20 /* 相關資訊字串的最大長度+1 */
typedef char vertextype[max_name];
#define infinity int_max /* 用整型最大值代替∞ */
#define max_vertex_num 20 /* 最大頂點個數 */
typedef enumgraphkind; /* */
typedef struct
arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedef struct
mgraph;
/*圖的陣列(鄰接矩陣)儲存(儲存結構由c7-1.h定義)的基本操作*/
int locatevex(mgraph g,vertextype u)
return k;
}void minispantree_prim(mgraph g,vertextype u)
}closedge[k].lowcost=0; /* 初始,u= */
printf("最小代價生成樹的各條邊為:\n");
for(i=1;iint main()
演算法:拼接對子最小總cost
6樓:涐de雨
在看嚴蔚敏的這個prim演算法之前,我是看的《演算法導論》上的prim演算法,感覺那個更容易理解prim演算法,只是嚴的有相應的步驟,可以照著實現,網上好多實現prim演算法的,貌似也是基於這個。那個closedge[j].lowcost是用來記錄v到u-v的權值的(v是已經選擇的邊,u是所有的邊,u-v是剩下的邊),在這裡可以找到v到u-v的最小權值。
你手邊應該有書吧,那我就對著嚴的書說了,對於v1有v2,v3,v4分別是6,1,5,這時可以存入陣列(對著那個p174的表),然後選了v3,這個時候就是需要更新closedge.lowcost,因為v2到v1是6而v2到v3是5,所以p175那邊的演算法倒數第六行的for迴圈就是用來更新這個的,因為對於新加入的點,可能會出現上面說的情況,其餘應該沒什麼問題的吧
資料結構 prim和kruskal最小生成樹 的**怎麼寫?
7樓:匿名使用者
將城市看成是點,城市之間的距離看成是點之間的權值。
下面是prim演算法實現的最小生成樹**。,利用鄰接矩陣儲存邊的資訊。程式已通過編譯了,可以直接執行。
#include
#include
typedef int vrtype;
typedef char infotype;
#define max_name 3
/*頂點字串的最大長度+1*/
#define max_info 20
/*相關資訊字串的最大長度+1*/
typedef char vertextype[max_name];
#define infinity 32767
/*用整型最大值代替無窮大*/
#define max_vertex_num 20
/*最大頂點個數*/
typedef enum graphkind;
/**/
typedef int pathmatrix[max_vertex_num][max_vertex_num];
typedef int shortpathtable[max_vertex_num];
typedef struct
arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedef struct
mgraph;
int locatevex(mgraph g,vertextype u)
return k;
}void minispantree_prim(mgraph g,vertextype u)
}closedge[k].lowcost=0;
/*初始u=*/
printf("zuixiaodaijiashengchengshudegetiaobianwei:\n");
for(i=1;ivoid main()
急求,資料結構課程設計用kruskal 演算法求最小生成樹
8樓:匿名使用者
將城市看成是點,城市之間的距離看成是點之間的權值。
下面是prim演算法實現的最小生成樹**。,利用鄰接矩陣儲存邊的資訊。程式已通過編譯了,可以直接執行。
#include
#include
typedef int vrtype;
typedef char infotype;
#define max_name 3
/*頂點字串的最大長度+1*/
#define max_info 20
/*相關資訊字串的最大長度+1*/
typedef char vertextype[max_name];
#define infinity 32767
/*用整型最大值代替無窮大*/
#define max_vertex_num 20
/*最大頂點個數*/
typedef enum graphkind;
/**/
typedef int pathmatrix[max_vertex_num][max_vertex_num];
typedef int shortpathtable[max_vertex_num];
typedef struct
arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedef struct
mgraph;
int locatevex(mgraph g,vertextype u)
return k;
}void minispantree_prim(mgraph g,vertextype u)
}closedge[k].lowcost=0;
/*初始u=*/
printf("zuixiaodaijiashengchengshudegetiaobianwei:\n");
for(i=1;ivoid main()
下列常用演算法中,適合計算最大公約數的演算法是
計算最大公約數的演算法是歐幾里得演算法。也就是我們知道的輾轉相除法。現在開始排除法看你這道題目。窮舉法,可以用,不過不是歐幾里得演算法。查詢法,和窮舉法也差不多了。排序法,歐幾里得演算法只要比個大小,大除以小,所以也算不上排序。因此答案應該是迭代法。雖然和程式語言中的迭代不完全一樣,不過這種反覆計算...
Vlfeat庫中mser演算法的橢圓擬合是怎麼實現
p polyfit x,y,n 用於多項式曲線擬合,其中x,y是一個已知的n個資料點座標向量,當然其長度均勻為n,n是用來擬合的多項式係數,p是求出的多項式係數,n次多項式應該有n 1個係數,故p的長度為n 1。擬合的準則是最小二乘法。請教關於mser演算法中 橢圓擬合的問題 p polyfit x...
計算機網路路由演算法,計算機網路中得路由演算法怎麼回事
關於路由器如何收集網路的結構資訊以及對之進行分析來確定最佳路由,有兩種主要的路由演算法 總體式路由演算法和分散式路由演算法。採用分散式路由演算法時,每個路由器只有與它直接相連的路由器的資訊 而沒有網路中的每個路由器的資訊。這些演算法也被稱為dv 距離向量 演算法。採用總體式路由演算法時,每個路由器都...