1125 pojBig Christmas Tree

来源:互联网 发布:经传软件跟风统计 编辑:程序博客网 时间:2024/06/05 00:56
本体我只想说说题意: 在给出的所有点中找到一个点,到所有点的时间最短,输出这个点,并输出最短距离,如果不连通, 则输出“disjoint” 由于题意没看明白, 错了好多次。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int M = 105;const int inf = 99999999;int dist[M][M];int n;void init(){    for(int i = 1; i <= n; i++)        for(int j = 1; j <= n; j++)            dist[i][j] = inf;}void floyd(){    int s;    int maxlenght = 0;    int maxn = inf;    for(int k = 1; k <= n; k++)        for(int i = 1; i <= n; i++)            for(int j = 1; j <= n; j++)                if(i != j && dist[i][j] > dist[i][k] + dist[k][j])                    dist[i][j] = dist[i][k] + dist[k][j];    for(int i = 1; i <= n; i++){        maxlenght = 0;        for(int j= 1; j <= n; j++)            if(i != j && maxlenght < dist[i][j])                maxlenght = dist[i][j];        if(maxn > maxlenght){            maxn = maxlenght;            s = i;        }    }    if(maxn != inf)        printf("%d %d\n", s, maxn);    else        printf("disjoint\n");}int main(){    int m , a, b;    while(scanf("%d", &n) != EOF){        if(!n)            break;        init();        for(int i = 1; i <= n; i++){            scanf("%d", &m);            for(int j = 0; j < m; j++){                scanf("%d%d", &a, &b);                dist[i][a] = b;            }        }        floyd();    }    return 0;}

0 0