zoukankan      html  css  js  c++  java
  • 最小生成树

    这里屯代码,毕竟新手&&蒟蒻

     1 #include<cstring>
     2 #include<cstdio>
     3 #include<vector>
     4 using namespace std;
     5 const int MAXN=10000;
     6 vector<int> W[MAXN],E[MAXN];
     7 int dis[MAXN],ans=0,n,m,map[MAXN][MAXN];
     8 bool vis[MAXN]={0};
     9 void add(int u,int v,int w1){
    10     E[u].push_back(v);
    11     W[u].push_back(w1);
    12 }
    13 
    14 void prim(){
    15     memset(dis,127,sizeof(dis));
    16     dis[1]=0;
    17     for (int i=0;i<n;i++){
    18         int min=100000,minn;
    19         for (int j=1;j<=n;j++){
    20             if (dis[j]<min&&!vis[j]){
    21                 min=dis[j];
    22                 minn=j;
    23             }
    24         }
    25         vis[minn]=1;
    26         ans+=min;
    27         for (int j=0;j<E[minn].size();j++){
    28             if (W[minn][j]<dis[E[minn][j]]){
    29                 dis[E[minn][j]]=W[minn][j];
    30             }    
    31         }
    32     }
    33 }
    34 
    35 int main(){
    36     scanf("%d",&n);
    37     int u,v,w1;
    38     for (int i=1;i<=n;i++){
    39         for (int j=1;j<=n;j++) scanf("%d",&map[i][j]);
    40     }
    41     for (int i=1;i<=n;i++)
    42         for (int j=1;j<i;j++) {
    43             add(j,i,map[i][j]);
    44             add(i,j,map[i][j]);
    45         }
    46     prim();
    47     printf("%d",ans);
    48 }
     1 #include<cstring>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<vector>
     5 #include<cstdlib>
     6 using namespace std;
     7 const int MAXN=100000;
     8 vector<int> W[MAXN],E[MAXN];
     9 int dis[MAXN],ans=0,n,m,fa[MAXN];
    10 bool vis[MAXN]={0};
    11 struct edgee{
    12     int u,v,w;
    13 };
    14 edgee edge[1000];
    15 
    16 int root(int now){
    17     if (fa[now]!=now) fa[now]=root(fa[now]);
    18     return fa[now];
    19 }
    20 
    21 void kls(){
    22     for (int i=0;i<m;i++){
    23         if (root(edge[i].u)!=root(edge[i].v)) {
    24             fa[root(edge[i].u)]=edge[i].v;
    25             ans+=edge[i].w;
    26         }
    27     }
    28 }
    29 
    30 int comp(const void*a,const void*b){
    31     edgee*aa =(edgee*)a;
    32     edgee*bb =(edgee*)b;
    33     return aa->w>bb->w;
    34 }
    35 int main(){
    36     scanf("%d%d",&n,&m);
    37     int u,v,w1;
    38     for (int i=1;i<=n;i++) fa[i]=i;
    39     for (int i=0;i<m;i++){
    40         scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
    41     }
    42     qsort(edge,m,sizeof(edge[0]),comp);
    43     kls();
    44     printf("%d",ans);
    45 }

    一定要注意qsort的正确打开姿势

    {qsort (数组名,长度,自定义函数)

  • 相关阅读:
    Unable to load configuration.
    Hibernate映射文件如何配置触发器
    hibernate的集中持久化方法的区别
    Hibernate.lock()方法中各种锁的区别
    JNDI全面总结
    代理模式
    Java常见的几种内存溢出及解决方法
    Hibernate整合C3P0实现连接池
    Hibernate与Mybatis的概念区别
    sql之truncate 、delete与drop区别
  • 原文地址:https://www.cnblogs.com/wuminyan/p/5079144.html
Copyright © 2011-2022 走看看