Попытка использовать пример минимального дерева охватывания из книги, но не работает с большими даннымиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Попытка использовать пример минимального дерева охватывания из книги, но не работает с большими данными

Сообщение Anonymous »

Примечание: это не мой код < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»