题目:http://acm.hdu.edu.cn/showproblem.php?pid=1301
/************************************************************************/ /* hdu Jungle Roads 最小生成树 题目大意:最小生成树,题目很长,题意很简单就是最小生成树,prim算法模拟 */ /************************************************************************/ #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> #define MAX 0xfffffff const int N = 30; int map[N][N]; int vis[N]; int n; void build_map() { int t = n; char v,e; int num,len; for (int i = 0; i < n; i++) for (int j = i; j < n; j++) map[i][j] = map[j][i] = ((i==j)?0:MAX); while(--t) { getchar(); v = getchar(); scanf("%d",&num); while(num--) { getchar(); e = getchar(); scanf("%d",&len); map[v-'A'][e-'A'] = map[e-'A'][v-'A'] = len; } } } int prim() { int t = n; int sum = 0; int min,k; vis[0] = 1; while(--t) { min = MAX; for(int i = 1; i < n; i++) { if (vis[i] != 1 && map[0][i] < min) { min = map[0][i]; k = i; } } vis[k] = 1; sum += min; for (int i = 1; i < n; i++) { if (vis[i] != 1 && map[k][i] < map[0][i]) map[0][i] = map[k][i]; } } return sum; } int main() { while(scanf("%d",&n) && n != 0) { build_map(); memset(vis,0,sizeof(vis)); printf("%d\n",prim()); } return 0; }
本文详细解析了 HDU 1301 题目中的最小生成树问题,并使用 Prim 算法进行求解。通过具体的 C 语言代码实现展示了如何构建图的邻接矩阵并应用 Prim 算法来找到最小生成树。
&spm=1001.2101.3001.5002&articleId=85579378&d=1&t=3&u=9193ae0ac08e4fbf903f25a91d685242)
85

被折叠的 条评论
为什么被折叠?



