最小生成树(浙大研究生复试题目)
来源:互联网 发布:h&m淘宝 编辑:程序博客网 时间:2024/06/01 09:52
2011.2.26 14:50
这道题目想了很久,还是没做出来。。。现在想起来,有的道路已经修好了,虽然他本来可能不是最优二叉树的一条边,但是他修好了,他的权值就成为0了,你不必为他付出代价,所以他理想当然的成了最小生成树的一条边。。。
所以在存在已经建好的公路上,求解最小生成树和以前其实上一样的,对于这个我确实想太多了,哎。。脑袋不好。。。
下面是代码。。。
#include <stdio.h>
#include<iostream>
using namespace std;
#define MAX_Point 100
struct Edge {
int point;
int lowcost;
} closedge[MAX_Point];
int map[MAX_Point][MAX_Point];
int Prim(int n)
{
int i, j, k, min, sum = 0;
closedge[0].lowcost = -1;
for (i = 1; i < n; ++i)
{
closedge[i].point =0;
closedge[i].lowcost = map[0][i];
}
for (i = 1; i < n; ++i)
{
min = INT_MAX;
for (j = 0; j < n; ++j)
{
if(closedge[j].lowcost != -1 && closedge[j].lowcost < min)
{
k = j;
min = closedge[j].lowcost;
}
}
sum += closedge[k].lowcost;
closedge[k].lowcost = -1;
for (j = 0; j < n; ++j)
{
if(map[k][j] < closedge[j].lowcost)
{
closedge[j].point = k;
closedge[j].lowcost = map[k][j];
}
}
}
return sum;
}
int main()
{
int n, a, b, c, d;
while (scanf("%d", &n), n)
{
int m = n * (n - 1) / 2;
for (int i = 0; i < m; i++)
{
scanf("%d%d%d%d", &a, &b, &c, &d);
map[a - 1][b - 1] = map[b - 1][a - 1] = (d == 1 ? 0 : c);
}
printf("%d\n", Prim(n));
}
return 0;
}
- 最小生成树(浙大研究生复试题目)
- 畅通工程 hdu 1863 最小生成树+并查集 浙大计算机研究生复试上机考试-2007年
- 还是畅通工程(2006浙江大学研究生上机复试题目[最小生成树] hdoj 1233)
- 2007年浙大研究生复试机试真题-最小长方形
- 浙大复试上机题目解答(1)
- 浙大复试上机题目解答(2)
- 浙大复试上机题目解答(3)
- 2007浙大复试上机考试题目1--最小长方形
- HDOJ 1236 排名(排序)(浙大2005研究生复试)
- 畅通工程(2007浙江大学研究生复试上机题[最小生成树||并查集])
- 继续畅通工程(2008浙江大学研究生复试上机题[最小生成树] hdoj 1879 )
- 09年浙大研究生复试机试
- 2008浙大研究生复试热身赛_Floyd_Dijkstra_hdoj1874
- 浙大复试(三)
- 浙大复试(二)
- 惠民工程(2013中南大学研究生复试[最小生成树])
- 浙大计算机研究生复试上机考试(2010)——二叉搜索树(hdu3791)
- hdu 1084 最大报销额(浙大研究生复试题)(01背包的变形)
- 循环队列
- 还是畅通工程hdoj1233
- hdoj1231
- View類的層次結構
- ASIHTTPRequest 一款强大的HTTP包装开源项目
- 最小生成树(浙大研究生复试题目)
- 安装EntityFramework方法
- 图像处理-基本算法之线性变换
- Iphone开发-NSRunLoop概述和原理
- 重载抽取运算f符<<
- SQL Server 2005 笔记(第二章:物理查询处理)
- 点击 UITextView 输入文字,光标都从最初点开始
- serialize
- 生成android使用的BKS证书