浙大数据结构:08-图7 公路村村通 (30 分)Prim与Kruskal算法

08-图7 公路村村通 (30 分)

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

输入格式:
输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。

输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。

输入样例:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
输出样例:
12

代码

使用的是Kruskal算法,原因是为了锻炼一下自己,顺便重新写一下最小堆还有复习一下相关的数据结构。测试结果出现了段错误,不明所以,我自己使用了浙大数据结构实验书上面的数据进行了测试,没有发现问题,不知道是用什么数据进行测试的

#include <iostream>
#define MaxSize 1001
using namespace std;
typedef int Vertex;
typedef int ElementType;
/*图的邻接表定义*/
typedef struct ListNode* List;
typedef struct ENode* Edge;
struct ENode {
	Vertex v1;
	Vertex v2;
	ElementType Weight;
};
struct ListNode {
	Vertex V;
	ElementType Weight;
	List Next;
	ListNode():Next(NULL){}
};

typedef List PtrToNode;
typedef struct VNode{
	PtrToNode FirstEdge;
}PtrArray[MaxSize];

typedef struct GraphNode* Graph;
struct GraphNode {
	int Nv;
	int Ne;
	PtrArray heads;
};


Graph CreatGraph(int N) {
	Graph G = new GraphNode;
	G->Nv = N;
	G->Ne = 0;
	for (int i = 0; i <= N; i++) {
		G->heads[i].FirstEdge = NULL;
	}
	return G;
}

void InsertEdge(Graph G) {
	Vertex v1, v2;
	ElementType Weight;
	cin >> v1 >> v2 >> Weight;
	List tmp = new ListNode;
	tmp->Next = G->heads[v1].FirstEdge;
	tmp->V = v2;
	tmp->Weight = Weight;
	G->heads[v1].FirstEdge = tmp;

	tmp = new ListNode;
	tmp->Next = G->heads
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值