TOJ 2870 The K-th City 解题

TOJ 2870 The K-th City 解题

最小路径问题。
求完以后排序就可以了。
这题wa了一次。因为最近写了好多有向图的然后这个在读入数据的时候忘记考虑这个是一个无向图了。
 1 #include < stdio.h >
 2 #include < string .h >
 3 int  data[ 300 ][ 300 ],aa,bb,cc,a[ 300 ],b[ 300 ],n,m,i,j,k,t;
 4 int  main()
 5 {
 6    while(1)
 7    {
 8    scanf("%d",&n);
 9    if(n==0)break;
10    scanf("%d",&m);
11    memset(data,3,sizeof(data));
12    for(i=0;i<m;i++)
13    {
14        scanf("%d%d%d",&aa,&bb,&cc);
15        data[aa][bb]=cc;
16        data[bb][aa]=cc;
17    }

18    for(i=0;i<n;i++)data[i][i]=0;
19    for(k=0;k<n;k++)
20        for(i=0;i<n;i++)
21            for(j=0;j<n;j++)
22                if(data[i][k]+data[k][j]<data[i][j])
23                    data[i][j]=data[i][k]+data[k][j];
24    for(i=0;i<n;i++)a[i]=data[0][i];
25    for(i=0;i<n;i++)b[i]=i;
26    for(i=0;i<n;i++)
27        for(j=0;j<n-1;j++)
28            if((a[j]>a[j+1]) || ((a[j]==a[j+1])&& b[j]>b[j+1]))
29            {
30                t=a[j];
31                a[j]=a[j+1];
32                a[j+1]=t;
33                t=b[j];
34                b[j]=b[j+1];
35                b[j+1]=t;
36            }

37
38    scanf("%d",&k);
39    printf("%d\n",b[k]);
40    }

41    return 0;
42}

43

你可能感兴趣的:(TOJ 2870 The K-th City 解题)