我制作了以下节点和弧结构:
struct arc
{
int length;
string start;
string end;
arc(int k,string s,string e)
{
this->length = k;
this->start = s;
this->end = e;
}
};
struct node
{
string name;
double x;
double y;
vector<arc> link;
node(string n,double xx,double yy)
{
this->name = n;
this->x = xx;
this->y = yy;
}
};
现在我想制作一个图形数据结构,以便我能够在其上实现Kruskal的算法。 我无法理解如何利用这两种结构。 每个节点都存储其名称和坐标以及有关进出该弧的弧的信息。 所以我有一个节点集群,但我如何将所有节点链接在一起。这里没有根节点。我应该在图表类中添加什么? 我有searhced邻接列表和矩阵,但无法理解如何将我的想法与他们联系起来?请解释
答案 0 :(得分:0)
您需要定义一个标准来比较两个弧并确定哪一个是“更小”。
给定两个节点的坐标,知道如何比较它们。
按照您的标准订购弧线。
从包含所有节点但没有弧的空图开始。
使用DisjointSet结构来维护有关所连接组件的信息(以避免循环)
将弧线从小到最大添加到图形中,如果进行循环则忽略弧形。
Kruskal算法:http://en.wikipedia.org/wiki/Kruskal's_algorithm
DisjointSet:http://en.wikipedia.org/wiki/Disjoint-set_data_structure