最小生成树 prim算法

#include"Graph.h" #include<assert.h> #include<iostream> #include<fstream> #include<limits> const int MAX=std::numeric_limits<int>::max(); template<class T,class E> void prim(int vetex_num,Graph<T,E> &myGraph) { int *visited=new int[vetex_num]; visited[0]=-1; for(int i=1;i<vetex_num;i++) { visited[i]=myGraph.getWeight(0,i); } cout<<0<<endl; for(int i=1;i<vetex_num;i++) { int min_index; int min_weight=MAX; for(int j=0;j<vetex_num;j++) { if(visited[j]>0&&visited[j]<MAX&&min_weight>visited[j]) { min_index=j; min_weight=visited[j]; } } if(min_weight==MAX) { cerr<<"此图不是连通图!"<<endl; cerr<<i<<endl; } else { cout<<min_index<<endl; visited[min_index]=-1; for(int k=0;k<vetex_num;k++) { if(visited[k]!=-1) { int temp_weight=myGraph.getWeight(k,min_index); if(temp_weight>0&&temp_weight<visited[k]) visited[k]=temp_weight; } } } } } int main() { ifstream cin("input.txt"); int vetex_num=100; Graph<char,int> myGraph(vetex_num); //myGraph.Init(cin); myGraph.RandInit(); prim(vetex_num,myGraph); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值