0
点赞
收藏
分享

微信扫一扫

hdu1879 继续畅通工程--prim


原题链接: ​​http://acm.hdu.edu.cn/showproblem.php?pid=1879​​


中文题目,不做解析了,就是一个简单的prim。


代码:

#define _CRT_SECURE_NO_DEPRECATE 

#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;

int n;
int p[105][105];
int lowCost[105];

int prim()
{
int ans = 0;
for (int i = 1; i <= n; i++)
lowCost[i] = p[1][i];//默认1为起点
lowCost[1] = -1;

for (int i = 1; i < n; i++)
{
int min = 99999999;
int minIndex;
for (int j = 1; j <= n; j++)
{
if (lowCost[j] != -1 && lowCost[j] < min)
{
min = lowCost[j];
minIndex = j;
}
}

ans += min;
lowCost[minIndex] = -1;

for (int j = 1; j <= n; j++)
{
if (p[minIndex][j] < lowCost[j])
lowCost[j] = p[minIndex][j];
}
}

return ans;
}

int main()
{
int a, b, cost, flag;
while (~scanf("%d", &n) && n)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= 1; j++)
p[i][j] = INT_MAX;

for (int i = 1; i <= n*(n - 1) / 2; i++)
{
scanf("%d%d%d%d", &a, &b, &cost, &flag);
if (flag == 1)
p[a][b] = p[b][a] = 0;
else
p[a][b] = p[b][a] = cost;
}

printf("%d\n", prim());
}
return 0;
}



举报

相关推荐

0 条评论