题目链接:
传送门
题目描述:
市政府“惠民工程”的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。
输入:
测试输入包含若干测试用例。每个测试用例的第1行给出居民点数目M ( < =100 )、 评估的管道条数 N;随后的 N 行对应居民点间管道的成本,每行给出一对正整数,分别是两个居民点的编号,以及此两居民点间管道的成本(也是正整数)。为简单起见,居民点从1到M编号。
输出:
对每个测试用例,在1行里输出全市管道畅通所需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
样例输入:
3 3
1 2 1
1 3 2
2 3 4
3 1
2 3 2
样例输出:
3
?
prim算法c参考代码:
#include <stdio.h>
#include <string.h>
#define INF 0x3f3f3f3f
#define MAX 101
int m,n;
int cost[MAX][MAX];
int dist[MAX];
int visited[MAX];
void prim()
{
memset(visited,0,sizeof(visited));
int i,j,sum=0;
for(i=1;i<=m;i++)
dist[i]=cost[1][i];
visited[1]=1;
for(i=1;i<m;i++)
{
int min=INF,pos=-1;
for(j=1;j<=m;j++)
{
</