POJ 2485 Highways(prim 最小生成树)

来源:互联网 发布:软件编程在哪里学 编辑:程序博客网 时间:2024/04/26 11:00
最小生成树告诉你信息为点的信息,便于构造邻接矩阵,prim上
#include <cstdio>#include <algorithm>const int MAXNODE = 505 , inf=65538;   //MAXNODE 邻接矩阵的大小  inf 根据题目数据定义为无穷大。using namespace std;int Graph[MAXNODE][MAXNODE];int MinSpace[MAXNODE];              //将最小生成树的所有边全值存在MinSpace数组中。int n,m;int main(){    void Creat_Graph();    void prim();    scanf("%d",&n);    while(n--)    {        scanf("%d",&m);        Creat_Graph();        prim();        sort(MinSpace,MinSpace+m-1);        //用sort函数按照升序对MinSpace中的数据进行排序。        printf("%d\n",MinSpace[m-2]);       //输出MinSpace中最大的值    }    return 0;}void Creat_Graph()                        //邻接矩阵的形式存储图。{    for(int i = 0 ; i < m ; i++ )    {        for( int j = 0 ; j < m ; j++ )        {            scanf("%d",&Graph[i][j]);        }    }}void prim(){    int key=0,k;    int LowCost[MAXNODE];    int MinCost,CloseVertex[MAXNODE];    for(int i = 0 ; i< m ; i++)    {        LowCost[i]=Graph[0][i];    //LowCost数组中存储到其他顶点的最短距离。        CloseVertex[i]=0;    //CloseVerterx中存放最小生成树的顶点。closeVertex[i]==0 表示该顶点存入最小生成树中。    }    for(int i = 1 ; i < m ; i++ )    {        MinCost=inf;        for(int j = 0 ; j < m ; j++)        {            if(LowCost[j] < MinCost && LowCost[j]!=0)            {                MinCost=LowCost[j];     //LowCost[j]==0,表示j顶点存入最小生成树中。                k=j;            }        }       MinSpace[key++]=MinCost;    //将依次得到的最短距离存入MinSpace数组。        LowCost[k]=0;        for(int j = 0 ;j < m ; j++ )        {            if(Graph[k][j]<LowCost[j]  && LowCost[j])   //修改其他顶点的边的权值跟最小生成树的顶点序号。            {                LowCost[j]=Graph[k][j];                CloseVertex[j]=k;            }        }    }}