Примечание: это не мой код < /p>
Я пытаюсь использовать структуры данных с минимальным алгоритмом охватчивых деревьев C ++, но, как вы можете видеть, я сделал ребра [] массив краев и прокомментировал старые края [] массив [], но, похоже, он не работает для большего количества края или чего -то. (Кстати, я просто использую chars как INT) < /p>
Кто -нибудь знает, почему? Я не сильно менял, я только что изменил массив краев.
он хорошо складывается, но если вы запустите его, вы увидите, что он не будет работать с моими данными, но это будет с исходными данными.#include
using namespace std;
class MSTEdge
{
char src;
char dest;
int weight;
public:
MSTEdge(char s = 0, char d = 0, int w = 0) : src(s), dest(d), weight(w) { }
char& getSrc() { return src; }
char& getDest() { return dest; }
int& getWeight() { return weight; }
int& get() { return getWeight(); }
};
// undirected and weighted graph
class Graph
{
int V, E;
MSTEdge* edge;
int icount;
public:
Graph(int v, int e) : V(v), E(e), icount(0)
{
edge = new MSTEdge[e];
}
int& getVertexAmount() { return V; }
int& getEdgeAmount() { return E; }
MSTEdge*& getEdges() { return edge; }
MSTEdge& operator [](int x) { return edge[x]; }
void insert(MSTEdge& e)
{
edge[icount++] = e;
}
};
// subset for union-find
class subset
{
int parent;
int rank;
public:
subset(int p = 0, int r = 0) : parent(p), rank(r) {}
int& getTheParent() { return parent; }
int& getTheRank() { return rank; }
};
// find set of an element i
int find(subset* subsets, int i)
{
// find root and make root as parent of i (path compression)
if (subsets.getTheParent() != i)
subsets.getTheParent() = find(subsets, subsets.getTheParent());
return subsets.getTheParent();
}
// union of two sets of x and y
void Union(subset* subsets, int x, int y)
{
int x_root = find(subsets, x);
int yroot = find(subsets, y);
// Attach smaller rank tree under root of high rank tree
// (Union by Rank)
if (subsets[x_root].getTheRank() < subsets[yroot].getTheRank())
subsets[x_root].getTheParent() = yroot;
else if (subsets[x_root].getTheRank() > subsets[yroot].getTheRank())
subsets[yroot].getTheParent() = x_root;
// If ranks are same, then make one as root and increment its rank by one
else
{
subsets[yroot].getTheParent() = x_root;
subsets[x_root].getTheRank()++;
}
}
template
void partition_array(T* arr, int& i, int& j, T pivot)
{
while (i pivot.get())
j--;
if (i
Подробнее здесь: https://stackoverflow.com/questions/358 ... nt-work-wi
Попытка использовать пример минимального дерева охватывания из книги, но не работает с большими данными ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как реализовать минимальное дерево охватывания в C ++ с более чем 2000 узлами?
Anonymous » » в форуме C++ - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Странный пример кода cpp (может быть?) о typedef из книги «Дизайн и эволюция C++».
Anonymous » » в форуме C++ - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Странный пример кода cpp (может быть?) о typedef из книги «Дизайн и эволюция C++».
Anonymous » » в форуме C++ - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Странный пример кода cpp (может быть?) о typedef из книги «Дизайн и эволюция C++».
Anonymous » » в форуме C++ - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-