题目位置
没有特色,照搬 floyd函数
#include<stdio.h>
typedef struct Graph *MGraph;
struct Graph{
int G[100][100];
int size;
};
void CreatMGraph(MGraph Map);
void floyd(MGraph Map);
void findmin(MGraph Map);
int N,E;
int main(){
scanf("%d %d",&N,&E);
MGraph Map = (MGraph)malloc(sizeof(struct Graph));
Map->size= N;
CreatMGraph(Map);
floyd(Map);
findmin(Map);
}
void findmin(MGraph Map){
int i,j;
int MinMax=10000;
int Max=0;
int num=0;
int flag=0;
int animal;
for(i=0;i<Map->size;i++){
num=0;Max=0;
for(j=0;j<Map->size;j++){
if(Max<Map->G[i][j])Max=Map->G[i][j];
if(Map->G[i][j]<1000)num++;
}
if(Map->size==num&&MinMax>Max)
{animal=i,MinMax=Max;
flag=1;
}
}
if(flag){
printf("%d %d",animal+1,MinMax);
}
else{
printf("0");
}
}
void floyd(MGraph Map){
int K,i,j;
for(K=0;K<Map->size;K++){
for(i=0;i<Map->size;i++){
for(j=0;j<Map->size;j++){
if(Map->G[i][j]>(Map->G[i][K]+Map->G[K][j])){
Map->G[i][j]=Map->G[i][K]+Map->G[K][j];
}
}
}
}
}
void CreatMGraph(MGraph Map){
int i,j;
int begin,end,weight;
for(i=0;i<Map->size;i++){
for(j=0;j<Map->size;j++){
Map->G[i][j]=10000;
if(i==j)Map->G[i][j]=0;
}
}
for(i=0;i<E;i++){
scanf("%d %d %d",&begin,&end,&weight);
Map->G[begin-1][end-1]=weight;
Map->G[end-1][begin-1]=weight;
}
}