最小生成树
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;
}