E - la teoría de grafos de datos experimentales estructuras IX: árbol de expansión mínimo

Descripción

Hay n ciudades, algunas de las cuales pueden construir carreteras entre ciudades, diverso coste de la construcción de carreteras es diferente. Ahora queremos saber, la cantidad de dinero que pasar al menos reparar las carreteras se pueden vincular a toda la ciudad, por lo que una salida en cualquier ciudad, se puede llegar a cualquier otra ciudad.

Entrada

Que comprende una pluralidad de conjuntos de formato de datos de entrada.

La primera fila comprende dos enteros nm, y el número representativo del número de la construcción de carreteras urbanas posible. (N <= 100, m <= 10.000)

M líneas cada tres no negativos números enteros restante del ABC, se puede construir una carretera entre las ciudades y representantes urbanas b, la consideración C (ciudad numeradas de 1 a n).

Salida

Cada grupo de salidas por línea, sólo el costo mínimo de salida.
muestra

Entrada

3 2
1 2 1
1 3 1
1 0
Salida

2
0

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int dis[110],Map[110][110];
int vis[110];
int n,m;
int prim()
{
    int sum = 0;
    for(int i=1; i<=n; i++)
    {
        dis[i] = Map[1][i];
    }
    vis[1] = 1;
    for(int i=2; i<=n; i++)
    {
        int flag;
        int Min = INF;
        for(int j=1; j<=n; j++)
        {
            if(!vis[j]&&dis[j]<Min)
            {
                Min = dis[j];
                flag = j;
            }
        }
        vis[flag] = 1;
        sum += Min;
        for(int j=1; j<=n; j++)
        {
            if(!vis[j]&&dis[j]>Map[flag][j])
            {
                dis[j] = Map[flag][j];
            }
        }
    }
    return sum;
}
int main()
{
    int u,v,w;
    while(~scanf("%d %d",&n,&m))
    {
        memset(vis,0,sizeof(vis));
        memset(Map,INF,sizeof(Map));
        memset(dis,INF,sizeof(dis));
        for(int i=0; i<m; i++)
        {
            scanf("%d %d %d",&u,&v,&w);
            if(Map[u][v]>w)//注意这里一定要有 否则WA
                Map[u][v] = Map[v][u] = w;
        }
        int k = prim();
        printf("%d\n",k);


    }
    return 0;
}


Publicados 177 artículos originales · ganado elogios 7 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/Fusheng_Yizhao/article/details/104916506
Recomendado
Clasificación