POJ2485 Highways【最小生成树】【哈哈,第一个首次提交就AC的最小生成树】

 

因为英语差劲,只能读一句翻译一句。

题意:

flatopia非常平坦,不幸的是,没有高铁,因此交通是一个难题。
政府意识到了这一点,他们计划建一些高铁,这样不用离开高铁系统就能达到任意两个城市。
F的城市从1。。N,每条铁路联通两个城市。每条铁路都是直线,每条铁路都能被两个站使用。
每条铁路都能够互相穿插,但是一个司机只能选择一条铁路。
政府抠门,想建最短的距离铁路,两两联通。
输入:
T(case数)
c1n(3。。500)城市数
N lines  n个城市之间的距离(1,65536)int型搞定了
empty line
c2n
.. 

Problem: 2485   User: qq1203456195
Memory: 560K   Time: 172MS
Language: C   Result: Accepted
#include <stdio.h>
#include <string.h>
#define N 502
#define MAX 999999
int T,n,M[N][N],closet[N],visited[N],mindis,maxdis;
int min()
{
    int i,t=0;
    mindis=MAX;
    for (i=0;i<n;i++)
    {
        if(!visited[i]&&closet[i]<mindis)
        {
            mindis=closet[i];
            t=i;
        }
    }
    return t;
}
int main()
{
    int i,j,next;
    scanf("%d",&T);
    while (T--)
    {
        maxdis=0;
        //read Info
        scanf("%d",&n);
        for (i=0;i<n;i++)
            for (j=0;j<n;j++)
                scanf("%d",&M[i][j]);
        //Prim
        memset(visited,0,sizeof(visited));
        for (i=0;i<n;i++)
            closet[i]=M[0][i];
        visited[0]=1;
        for (i=1;i<n;i++)
        {
            next=min();
            maxdis=maxdis>mindis?maxdis:mindis;
            visited[next]=1;
            for (j=0;j<n;j++)
            {
                if (!visited[j]&&M[next][j]<closet[j])
                    closet[j]=M[next][j];
            }
        }
        printf("%d\n",maxdis);
    }
    return 1;
}

 

posted @ 2012-04-14 14:09  ZH奶酪  阅读(345)  评论(0编辑  收藏  举报