zoukankan      html  css  js  c++  java
  • 最小生成树(修路)

    /*题意:Flatopia岛要修路,这个岛上有n个城市,要求修完路后,各城市之间可以相互到达,且修的总
    路程最短.
    求所修路中的最长的路段*/

    Sample Input

    1
    
    3
    0 990 692
    990 0 179
    692 179 0

    Sample Output

    692
    #include <iostream>
    #define MAX 502
    using namespace std;
    int str[MAX][MAX];
    bool visit[MAX];//标记数组,没有加入到树中时为false,加入了为true
    int distan[MAX];//用以记录当前树到各个顶点的最小距离(它会被不断的更新,加入一个顶点更新一次)
    int n;
    int prim()//prim算法
    {
        int v,i,j,maxi=0;
        visit[0]=true;//将第一个顶点加入树中
        for(i=0;i<n;i++)//计算只有一个顶点时的distan[i]
            distan[i]=str[0][i];
        
        for(j=1;j<n;j++)
        {
            int mini=65550;
            for (i=0;i<n;i++)//找最小的边
            {
                if(visit[i]==false&&distan[i]<mini)//找出没有在当前树中且权值最小的点
                {
                    mini=distan[i];
                    v=i;
                }
            }
            //cout<<mini<<' ';
            visit[v]=true;//标记顶点v,加入生成树中
            if(maxi<mini)
                maxi=mini;
            for (i=0;i<n;i++)//将生成树的权值更新
            {
                if(visit[i]==false&&distan[i]>str[v][i])//distan[i]中始终放生成树到顶点i的最小权值
                {
                    distan[i]=str[v][i];
                }
            }
        }
        return maxi;
    }
    
    int main()
    {
        int i,j,t;
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(i=0;i<n;i++)
                visit[i]=false;
            for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                    scanf("%d",&str[i][j]);
                cout<<prim()<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    golang语言调试
    Debugging golang programs
    Goroutines vs Threads
    3dmax联机分布式渲染方法技巧详解
    VVDocumenter-Xcode
    Hallelujah Leonard Cohen
    创作思维导图的步骤
    XMind 快捷键完整命令
    圣经中有关天使的记载
    电箱吉他的电流声简单处理办法!
  • 原文地址:https://www.cnblogs.com/baoluqi/p/3745685.html
Copyright © 2011-2022 走看看