您的位置:首页 > 理论基础 > 计算机网络

poj 1258 最小代价网络

2012-10-31 16:55 253 查看
基本prim算法

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <queue>
#include <list>
#include <iomanip>
using namespace std;
///
///
const int INF =  20000000;
#define maxn 110
#define max(a,b)(a>b?a:b)
///
int N; //农场数目
int cost[maxn][maxn];
int lowc[maxn];
bool vis[maxn];
int prim()
{
int i, j;
int p = -1;
int minc, res = 0;
memset(vis, false, sizeof(vis));

vis[1] = true;
for (i = 2; i <= N; i++)
lowc[i] = cost[1][i];

for (i = 2; i <= N; i++)
{
minc = INF;
p = -1;
for (j = 1; j <= N; j++)
{
if (0 == vis[j] && lowc[j] < minc)
{
minc = lowc[j];
p = j;
}
}

res += minc;
vis[p] = 1;

for (j = 1; j <= N; j++)
{
if (0 == vis[j] && lowc[j] > cost[p][j])
lowc[j] = cost[p][j];
}
}
return res;
}
int main()
{
///
int i, j;
while(scanf("%d", &N) != EOF)
{
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
scanf("%d", &cost[i][j]);
}
}
int ans = prim();
printf("%d\n", ans);
}
///
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: