3362=数据结构实验之图论六:村村通公路

时间:2019-11-10
本文章向大家介绍3362=数据结构实验之图论六:村村通公路 ,主要包括3362=数据结构实验之图论六:村村通公路 使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define INF 99999999
 5 int map[1000][1000],dis[1000],visited[10000];
 6 int sum;
 7 void prim(int n)
 8 {
 9     int count=1,i,j,k;
10     while(count<=n)
11     {
12         count++;
13         int min=INF;
14         for(i=1; i<=n; i++)
15         {
16             if(visited[i]==0&&dis[i]<min)
17             {
18                 min=dis[i];
19                 j=i;
20             }
21         }
22         if(min==INF)
23         {
24             sum=-1;
25             return;
26         }
27         visited[j]=1;
28         sum+=dis[j];
29         for(k=1; k<=n; k++)
30         {
31             if(visited[k]==0&&dis[k]>map[j][k])
32                 dis[k]=map[j][k];
33         }
34     }
35 
36 }
37 int main()
38 {
39     int n,m;
40     while(~scanf("%d%d",&n,&m))
41     {
42         int i,j;
43         sum=0;
44         memset(visited,0,sizeof(visited));
45         for(i=1; i<=n; i++)
46         {
47             for(j=1; j<=n; j++)
48             {
49                 if(i==j)
50                     map[i][j]=0;
51                 else
52                     map[i][j]=INF;
53             }
54         }
55         while(m--)
56         {
57             int a,b,c;
58             scanf("%d%d%d",&a,&b,&c);
59             map[a][b]=map[b][a]=c;
60         }
61         for(i=1; i<=n; i++)
62         {
63             dis[i]=map[1][i];
64         }
65         prim(n);
66         printf("%d\n",sum);
67     }
68     return 0;
69 }

原文地址:https://www.cnblogs.com/Angfe/p/11831361.html