下面的代码在hiho上测试通过,题目的名字是:最小生成树--Prime算法
该方法的时间复杂度是O(V^2),V是图中的节点数,这里的图是无向图,且连通。
对于稀疏图来说,时间复杂度会变为O(ElogV),E为边数。
下面的代码与挑战程序设计一书中的风格很像,分为两部分:
1.更新结点距离
2.寻找最短距离结点
Prime算法的原理:
将所有结点分为两部分:已在树中和未在树中
从未在树中的结点集合里找一个到已在树中集合距离最短的结点,这里距离指的是相连两点的权值,并将该结点并入已在树中集合,然后用新并入的点更新前面说的距离,然后循环。
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N_MAX=1000;
int graph[N_MAX][N_MAX];
bool flag[N_MAX];
int dis[N_MAX];
int N;
void init()
{
fill(dis,d