普里姆求解:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
using namespace std;
const int MAX=;
const int INF=;
int n;//村庄数
int G[MAX][MAX],d[MAX];
bool isVisit[MAX]={false};
int prim(){
fill(d,d+MAX,INF);
d[]=;
int ans=;
for(int i=;i<n;i++){
int u=-,MIN=INF;
for(int j=;j<n;j++){
if(isVisit[j]==false&&d[j]<MIN){
u=j;
MIN=d[j];
}
}
if(u==-) return -;
isVisit[u]=true;
ans+=d[u];
for(int v=;v<n;v++){
if(isVisit[v]==false&&G[u][v]!=INF&&d[v]>G[u][v]){
d[v]=G[u][v];
}
}
}
return ans;
}
int main(){
while(scanf("%d",&n)&&n!=){
getchar();
fill(G[],G[]+MAX*MAX,INF);
int temp1,temp2;
char c1[],c2[];
for(int i=;i<n-;i++){
scanf("%s %d",&c1,&temp1);
for(int j=;j<temp1;j++){
scanf("%s %d",&c2,&temp2);
G[c1[]-'A'][c2[]-'A']=G[c2[]-'A'][c1[]-'A']=temp2;
}
}
int ans=prim();
printf("%d\n",ans);
} return ;
}

-克鲁斯卡尔:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
using namespace std;
const int MAX=;
const int MAXE=;
const int INF=;
int d[MAX],father[MAX];
int n,m=;
bool isVisit[MAX]={false};
struct edge{
int node1,node2;
int weight;
}E[MAXE];
bool cmp(edge e1,edge e2){
return e1.weight<e2.weight;
}
int findFather(int x){
int a=x;
while(x!=father[x]){
x=father[x];
}
while(a!=father[a]){
int temp=a;
a=father[a];
father[temp]=x;
}
return x;
}
int kruskal(){
int ans=,num_edge=;
for(int i=;i<n;i++)
father[i]=i;
sort(E,E+m,cmp);
for(int i=;i<m;i++){
int f1=findFather(E[i].node1);
int f2=findFather(E[i].node2);
if(f1!=f2){
father[f1]=f2;
ans+=E[i].weight;
num_edge++;
//边数等于顶点数-1结束
if(num_edge==n-) break;
}
}
if(num_edge!=n-) return -;
else return ans;
} int main(){
while(scanf("%d",&n)&&n!=){
getchar();
//fill(G[0],G[0]+MAX*MAX,INF);
char c1[],c2[];
int temp1,temp2;
for(int i=;i<n-;i++){
scanf("%s %d",&c1,&temp1);
for(int j=;j<temp1;j++){
scanf("%s %d",&c2,&temp2);
E[m].node1=c1[]-'A';
E[m].node2=c2[]-'A';
E[m].weight=temp2;
m++;
}
}
int ans=kruskal();
printf("%d\n",ans); } return ;
}

最新文章

  1. 分享一个MySQL分库分表备份脚本(原)
  2. Spark Streaming资源动态申请和动态控制消费速率剖析
  3. springMvc全局异常处理
  4. 水题 ZOJ 3880 Demacia of the Ancients
  5. filter:Alpha总结
  6. 在VS中编译C++静态库以及使用的方法
  7. 修改Mac]Bringing interface etch0:Device
  8. js时间冒泡,阻止事件冒泡
  9. hdu - 1829 A Bug&#39;s Life (并查集)&amp;&amp;poj - 2492 A Bug&#39;s Life &amp;&amp; poj 1703 Find them, Catch them
  10. js文件中调用另一个js文件:
  11. 监控-CPU使用率
  12. 结合JDK源码看设计模式——适配器模式
  13. CentOS系统/tmp目录里面的文件默认保留多久
  14. python摸爬滚打之day15----初识类
  15. kafka重复数据问题排查记录
  16. oracle PL/SQL的介绍
  17. CentOS7下Tomcat启动慢的原因及解决方案
  18. docker启动时报错
  19. &quot;Sorry this application cannot run under a virtual machine&quot; Error
  20. STL迭代器思考

热门文章

  1. JavaScript 获取function的参数
  2. vue 中router.go;router.push和router.replace的区别
  3. go中浮点型用法总结
  4. JQ广告弹窗&amp;随机抽奖————JQ
  5. 深入学习Redis主从复制
  6. LNMP环境安装
  7. 转:谈谈Linux下动态库查找路径的问题
  8. 启动数据库报:ORA-03113
  9. 【leetcode】929. Unique Email Addresses
  10. Qt installer framework学习