最小路径问题。
求完以后排序就可以了。
这题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