解题代码
#include <stdio.h>
#define MAXN 100
#define Infinity 20000
int Edge[ MAXN] [ MAXN] ;
int N;
void Judge ( int i, int * flag, int * max, int * index) ;
void Initialization ( void ) ;
int main ( )
{
int M, i, x, y, length;
scanf ( "%d %d" , & N, & M) ;
Initialization ( ) ;
for ( i = 0 ; i < M; i++ ) {
scanf ( "%d %d %d" , & x, & y, & length) ;
Edge[ x - 1 ] [ y - 1 ] = length;
Edge[ y - 1 ] [ x - 1 ] = length;
}
int j, k;
for ( k = 0 ; k < N; k++ )
for ( i = 0 ; i < N; i++ )
for ( j = 0 ; j < N; j++ )
if ( Edge[ i] [ k] + Edge[ k] [ j] < Edge[ i] [ j] )
Edge[ i] [ j] = Edge[ i] [ k] + Edge[ k] [ j] ;
int flag= 0 , max= Infinity, index= - 1 ;
for ( i = 0 ; i < N; i++ ) Judge ( i, & flag, & max, & index) ;
if ( flag) printf ( "%d %d" , index+ 1 , max) ;
else printf ( "0" ) ;
return 0 ;
}
void Initialization ( void ) {
int i, j;
for ( i = 0 ; i < N; i++ ) {
for ( j = 0 ; j < N; j++ ) {
if ( i != j) Edge[ i] [ j] = Infinity;
}
}
}
void Judge ( int i, int * flag, int * max, int * index) {
int j, M= 0 ;
for ( j = 0 ; j < N; j++ ) {
if ( Edge[ i] [ j] == Infinity) break ;
else if ( Edge[ i] [ j] > M) M = Edge[ i] [ j] ;
}
if ( j != N) return ;
else if ( M < * max) {
* max = M;
* index = i;
* flag = 1 ;
}
}
测试结果
问题整理
1.基础题。