zoukankan      html  css  js  c++  java
  • poj 1258

    题意:给n*n矩阵 表示个点个边  求最小生成树

    思路:Kruskal 算法

    //:简单介绍一下题意。农民要建立互联网络,目的使村庄里所有的农民连上网,
    //并且总费用最小。多组数据,每组数据给出一个n,然后给出n * n大小的无向图的邻接矩阵表示,值表示边权。
    //要求输出最小生成树的权值和。
    #include<iostream>
    #include<cstring>
    using namespace std;
    int map[101][101];
    int dist[101];
    int s[101];
    int n;
    void Krudkal()
    {
        int i,j;
        int sum=0;
        memset(s,0,sizeof(s));
        for(i=1;i<=n;i++)
            dist[i]=map[1][i];
        s[1]=1;
        for(i=1;i<n;i++)
        {
            int v=-1;
            int min=999999999;
            for(j=1;j<=n;j++)
                if(dist[j]<min&&!s[j])
                {
                    min=dist[j];
                    v=j;
                }
            if(v==-1) break;
            //if(min>max) max=min;
            s[v]=1;
            sum+=dist[v];
            dist[v]=0;
            for(j=1;j<=n;j++)
            {
                if(dist[j]>map[v][j])
                    dist[j]=map[v][j];
            }
        }
        cout<<sum<<endl;
    }
    int min(int x,int y)
    {
        if(x<y) return x;
        return y;
    }
    int main()
    {
        int t,i,j;
      
           while(scanf("%d",&n)!=EOF)
           {
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    scanf("%d",&map[i][j]);
                }
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    int e=min(map[i][j],map[j][i]);
                    map[i][j]=e;
                    map[j][i]=e; 
                }
            Krudkal();
        }
        return 0;
    }
  • 相关阅读:
    特征值分解与奇异值分解的相关学习记录
    week9:Recommender Systems
    关于PCA的一些学习汇总
    第四周疑难点
    第二章感知机习题
    Week7:SVM难点记录
    week6:Diagnosing Bias vs. Variance难点记录
    laravel ajax表格删除
    dropzone
    laravel 部分路由取消csrf
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3774710.html
Copyright © 2011-2022 走看看