poj 2485 highways(prim)

来源:互联网 发布:keil c51软件下载 编辑:程序博客网 时间:2024/04/27 03:31
题意:求连通n个城市间所需最短路径中最长的
思路:prim

#include "stdio.h"
#define M 505
#define MAX 65537
int map[M][M];

void prim (int n)
{
    intcost[M],flag[M],i,j,k,min,sum = 0;
    for (i = 0;i< n;i ++)
    {
       cost[i] = map[0][i];
       flag[i] = 0;
    }
    flag[0] =1;
    for (i = 1;i< n;i ++)
    {
       min = MAX;
       for (j = 1;j < n;j ++)
           if (flag[j]==0&&cost[j]< min)
           {
               min = cost[j];
               k = j;
           }
       flag[k] =1;
       sum =cost[k]>sum?cost[k]:sum;   //最短路径中最大的
       for (j = 1;j < n;j ++)
           if (cost[j] > map[k][j])
               cost[j] = map[k][j];
                                           //原来处理完后,cost保存的并不是每个最小值
    }
    printf("%d\n",sum);
}
int main ()
{
    intt,n,i,j;
    scanf("%d",&t);
    while (t--)
    {
       scanf ("%d",&n);
       for (i = 0;i < n;i ++)
           for (j = 0;j < n;j ++)
           {
               scanf ("%d",&map[i][j]);
               if (i == j)
               map[i][j] =MAX;    //这是要转为最大
           }
       prim (n);

    }


    return0;
}