zoukankan      html  css  js  c++  java
  • poj2485

    最小生成树问题:(用prim算法)

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

    #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;
    }
  • 相关阅读:
    tomcat对sessionId的处理分析
    MySQL 5.5 新增SIGNAL异常处理
    jetty对sessionId的处理分析
    Python3.x和Python2.x的区别
    java actor模型和消息传递简单示例
    构建工具scons让一切变得简单
    HTML元素控件事件表
    开始新的旅途
    JS各种常见知识点
    C#代码与javaScript函数的相互调用
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2129228.html
Copyright © 2011-2022 走看看