WEISS演算法書 Prim演算法

2021-05-25 18:01:43 字數 2713 閱讀 7889

寫這玩意亂寫一氣。。估計連自己都看不太懂了。。先留在這兒先。。免得程式給弄丟了。。

code:

#include 

#include 

using

namespace std;   

struct heapstruct   

;   

typedef heapstruct* priorityqueue;   

priorityqueue initialize(int maxelements)   

/*if(maxelements<5) */

pq->size=0;   

pq->capacity=maxelements;   

pq->elements=(int*)malloc(sizeof(int)*pq->capacity+1);   

if(pq->elements==null)   

pq->elements[0]=-10000;   

return pq;   

}   

void destroy(priorityqueue pq)   

bool isfull(priorityqueue pq)   

bool isempty(priorityqueue pq)   

void insert(int data,priorityqueue pq)   

int i;   

for(i=++pq->size;pq->elements[i/2]>data;i/=2)   

pq->elements[i]=data;   

}   

int deletemin(priorityqueue pq)   

int i=1;   

int child;   

int minelement=pq->elements[1];   

int lastelement=pq->elements[pq->size--];   

while(i*2<=pq->size)   

if(pq->elements[child]   

else

i=child;   

}   

pq->elements[i]=lastelement;   

return minelement;   

}   

struct vertexnode   

};   

struct vertex   

};   

typedef vertex* ab;   

struct entry;   

struct nondiregraph   

cout<<"給出邊名字"

cin>>tmps;   

cout<<"給出權值"

cin>>tmpw;   

vertexnode *tmpv=new vertexnode(tmps,tmpw);   

tmpv->nextvertex=vertice[i]->first;   

vertice[i]->first=tmpv;   

}   

}   

}   

~nondiregraph()   

delete vertice[i];   

}   

delete  vertice;   

}   

void addknownvertex(const string &name,entry *e);   

int findindexbyname(const string &name)   

}   

return -1;   

}   

};   

struct entry   

entry(string n,bool iv,int cw,string lv):name(n),isvisited(iv),currentweight(cw),lastvisited(lv){}   

};   

entry * initializeentry(const nondiregraph &g)   

return retentry;   

}   

void disposeentry(entry *e)   

void nondiregraph::addknownvertex(const string &name,entry *e)   

}   

if(e[j].currentweight>vn->weight+previousweight)   

}   

}   

}   

}   

entry * prim(nondiregraph &g,const string &startname)   

}   

for(;;)   

}   

int min=deletemin(pq);   

for(i=0;i   

}   

destroy(pq);   

for(i=0;i   

}   

break;   

}   

return table;   

}   

int main()   

disposeentry(table);   

return 0;   

}   

Prim演算法 Kruskal演算法

一 prim演算法 1 要求 1 生成一顆連通的樹 2 生成樹 包含全部頂點,v 1條邊,沒有迴路,並且新增一條邊會變成有迴路 3 權重和最小 2 過程模擬 最重要 貪心的思想,每一步都要選擇權值最小的,這棵樹所有跟頂點相連的邊中最小的。從根節點開始,讓樹慢慢的長大。過程 從v1開始 跟v1有聯絡的...

Prim演算法 Kruskal演算法

prim演算法 kruskal演算法 prim演算法和kruskal演算法,都是用來找出圖中最小生成樹的演算法,兩個演算法有些小差別。prim演算法 又稱普里姆演算法,以圖上的頂點為出發點,逐次選擇到最小生成樹頂點集距離最短的頂點為最小生成樹的頂點,並加入到該頂點集,直到包含所有的頂點。1.選擇一出...

Kruskal演算法 Prim演算法

最小生成樹是什麼?自a2392008643的部落格 此演算法可以稱為 加邊法 初始最小生成樹邊數為0,每迭代一次就選擇一條滿足條件的最小代價邊,加入到最小生成樹的邊集合裡。把圖中的所有邊按代價從小到大排序 把圖中的n個頂點看成獨立的n棵樹組成的森林 按權值從小到 擇邊,所選的邊連線的兩個頂點ui,v...