zoukankan      html  css  js  c++  java
  • 1001

    题目大意:

    求最小生成树

    解题思路:

    利用最小生成树的两种算法,在离散和数据结构都学过

    代码:

    #include<iostream>
     #include<algorithm>
      using namespace std;
      struct node{
          int from;
          int to;
          int w;
          };
    node  edge[102*100];
      int parent[102];
      bool cmp(node a,node b)
     {
         if(a.w<=b.w) return true;
         return false;
     }
    //查找已经建完道路的顶点
    int find(int a)
    {
        if(a!=parent[a])
            return find(parent[a]);
        else return a;
    }
     int kruskal(int n,int m)
     {
         sort(edge,edge+m,cmp);
         int i,x,y,ans=0;
        for(i=0;i<m;i++)
         {
            x=edge[i].from;
            y=edge[i].to;
            x=find(x);
            y=find(y);
            if(x!=y)
            {
                ans+=edge[i].w;
                parent[y]=x;
            }
    }
       return ans;
     }
    
    
     int main()
     {
         int n,q,k,i,j,m;
         while(cin>>n)
         {
             m=0;
            for(i=1;i<=n;i++)
             {
                 for(j=1;j<=n;j++)
                 {
                     cin>>k;
                    if(i>=j) continue;
                     edge[m].from=i;
                     edge[m].to=j;
                     edge[m].w=k;
                m++;
               }
            }
            for(k=1;k<=n;k++)
            parent[k]=k;
             cin>>q;
             
            for(k=1;k<=q;k++)
            {
                cin>>i>>j;
               i=find(i);
                j=find(j);
                 parent[j]=i;
          }
         
            cout<<kruskal(n,m)<<endl;
         }
         return 0;
     }
  • 相关阅读:
    DHCP脚本
    7.31
    7.30
    7.26
    7.24
    VLAN与三层交换机
    静态路由配置
    7.17
    四次挥手
    TCP三次握手,四次挥手
  • 原文地址:https://www.cnblogs.com/Sikaozhe/p/5615983.html
Copyright © 2011-2022 走看看