POJ 1251 Jungle Roads ( Prim , Kruscal )

来源:互联网 发布:nike足球淘宝 编辑:程序博客网 时间:2024/05/22 01:33

基础的最短路,只是初始化麻烦一些。。

不过刚开始老 TEL。。看了discuss 。。才知道数据有问题。。呃。。 改成cin 和cout 就过了。。不过。。。是有空该好好学学C++了= = 


//252K 0MS#include <stdio.h>#include <iostream>#include <cstdio>#define MAX_COST 105#define N 28#define DEBUG puts("debug")using namespace std ;int dis_betw[N][N] ;int low_dis[N] ;int flag[N] ;void Init_Dis_Betw ( ){    int i ;    for ( i = 0 ; i < N ; i ++ )    {        int j ;        for ( j = 0 ; j < N ; j ++ )        {            dis_betw[i][j] = MAX_COST ;        }    }}void Init_Flag_And_Low_Dis ( ){    int i ;    for ( i = 0 ; i < N ; i ++ )    {        flag[i] = 0 ;        low_dis[i] = MAX_COST ;    }}void Reachable_Matrix ( int const n ){    int i ;    for ( i = 1 ; i <= n-1 ; i ++ )    {       char row ;       cin >> row ;       int row_index ;       row_index = row - 'A' + 1 ;       int count ;       //scanf ("%d" , & count ) ;       cin >> count ;      // getchar ( ) ;       while ( count -- )       {           char rank ;           //scanf ("%c" , & rank ) ;           cin >> rank ;           int rank_index ;           rank_index = rank - 'A' + 1 ;           int length ;           //scanf ("%d" , & length ) ;           cin >> length ;        //   getchar ( ) ;           dis_betw[row_index][rank_index] = dis_betw[rank_index][row_index] = length ;       }    }}void Prime ( int const n ){    int s ;    s = 1 ;    Init_Flag_And_Low_Dis ( ) ;    flag[1] = 1 ;    int prim_weight ;    prim_weight = 0 ;    int m ;    m = 1 ;    int new_point ;    int new_weight ;    while ( m < n )    {        new_weight = MAX_COST ;        int i ;        for ( i = 1 ; i <= n  ; i ++ )        {            if ( 0 == flag[i] && low_dis[i] > dis_betw[s][i] )            {                low_dis[i] = dis_betw[s][i] ;            }            if ( 0 == flag[i] && new_weight > low_dis[i] )            {                new_weight = low_dis[i] ;                new_point = i ;            }        }        s = new_point ;        flag[s] = 1 ;        prim_weight += new_weight ;        m ++ ;    }    cout << prim_weight << endl ;}intmain ( ){    int n ;    while ( 1 )    {        cin >> n ;        if ( 0 == n )        {            break ;        }      //  getchar ( ) ;        Init_Dis_Betw ( ) ;        Reachable_Matrix ( n ) ;        Prime ( n ) ;    }    return 0 ;}


原创粉丝点击