由于cruskal算法的执行过程中需要合并,而致使实现较复杂,下面的算法基本上已有形状,还剩几个步骤,先留着,说不定我这个实现不是很好,遇到相关问题了再具体研究
/*-------------------------------------------------------------------
* Purpose:
* 使用cruskal算法求最小生成树
* 使用图为算法导论第二版p344 图23-1
* Time:
* 2012年3月19日 20:58:28
* Author:
* 张彦升
--------------------------------------------------------------------*/
#include <iostream>
#include <set>
#include <vector>
using namespace std;
#define V 9 /*点的个数*/
const int inf = 0x3f3f3f3f;
int vis[V];
int lowc[V]; /*最低代价*/
/**
* kruskal算法要对所有的边进行排序,所以需要一个边表
* 由边表可以得到边的两个顶点的位置,及其权重
*/
struct EdgeTable
{
int u;
int v;
int weight;
EdgeTable(int t_u,int t_v,int t_weight)
:u(u),
v(t_v),
weight(t_weight)
{
return;
}
};
bool operator <(const EdgeTable& left,const EdgeTable& right) const
{
if (left.we