您的位置:首页 > 其它

hdu 1102 Constructing Roads(图论:最小生成树)

2014-07-21 15:23 232 查看
又是最小生成树...

再这样刷下去都觉得自己无耻了,一会看看别的算法...

代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define LL long long
#define INF 0x7fffffff
using namespace std;

int n;
int dis[MAXN], g[MAXN][MAXN];

LL prim() {
LL ans;
int now, i, j;
int minnode, minedge;
for(i=1; i<=n; ++i)
dis[i] = INF;
now = 1;
ans = 0;
for(i=1; i<n; ++i) {
dis[now] = -1;
minedge = INF;
for(j=1; j<=n; ++j) {
if(now!=j && dis[j]>=0) {
dis[j] = min(dis[j], g[now][j]);
if(dis[j] < minedge) {
minedge = dis[j];
minnode = j;
}
}
}
now = minnode;
ans += minedge;
}
return ans;
}

int main(void) {
int i, j, q, a, b, dis;
while(scanf("%d", &n) != EOF) {
for(i=1; i<=n; ++i) {
for(j=1; j<=n; ++j) {
scanf("%d", &dis);
g[i][j] = dis;
}
}
scanf("%d", &q);
while(q--) {
scanf("%d%d", &a, &b);
g[a][b] = g[b][a] = 0;
}
cout << prim() << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: