您的位置:首页 > 其它

POJ 1258 -- 最小生成树(prim算法)

2016-02-02 14:13 393 查看
最小生成树
prim算法


题意

给定一个N个顶点的图,使连通一个农场的所用的路径长度之和最小。

题解

使用prim最小生成树算法,计算连通一个图(即N-1条边)的最短路径和

代码

#include <iostream>

using namespace std;
const int MAXN = 1000;
const int INF = 1e9;
int graph[MAXN][MAXN];
int cost[MAXN];
bool used[MAXN];
int N;
int result;
int prim(int s) //起点s
{
int costsum = 0;
for(int i = 0; i < N; i++)
{
cost[i] = INF;
used[i] = false;
}
cost[s] = 0;
int v;
while(true)
{
v = -1;
for(int u = 0; u < N; u++)
if(!used[u] && (v == -1 || cost[u] < cost[v]))
v = u;

if(v == -1)
break;
used[v] = true;
costsum += cost[v];
for(int u = 0; u < N; u++)
cost[u] = min(cost[u], graph[v][u]);
}
return costsum;
}

int main()
{
while(cin >> N)
{

for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
cin >> graph[i][j];

cout << prim(0) <<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: