0
나는 C++에서 크루스 칼의 알고리즘을 구축하려고를 사용하지 않는 논리에 의해 수정되고 있으며, 그것의 일부를 작성했습니다, 여기에 코드입니다 :배열이 어떻게 든 배열
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
using namespace std;
class Edge {
public:
int to;
int from;
int weight;
Edge();
void print_edge();
};
Edge::Edge(void) {
}
void Edge::print_edge() {
cout << "Edge to " << to << " from " << from << " of weight " << weight << endl;
}
int main() {
int *vertex_sets;
int vertex_size;
int edge_size = 0;
Edge* edges = new Edge[vertex_size * (vertex_size - 1)/2];
Edge* mst_edges = new Edge[vertex_size];
cin >> vertex_size;
vertex_sets = new int[vertex_size];
for (int i = 0; i < vertex_size; i++) {
int vertex_num;
cin >> vertex_num;
cout << "Assigning vertex set " << i << endl;
vertex_sets[i] = i;
int num_adjacent;
cin >> num_adjacent;
for (int j = 0; j < num_adjacent; j++) {
edges[edge_size] = Edge();
edges[edge_size].from = i;
cin >> edges[edge_size].to >> edges[edge_size].weight;
edge_size++;
}
cout << "Vertex " << i << " is in set " << vertex_sets[i] << endl;
cout << "Vertex " << 0 << " is in set " << vertex_sets[0] << endl;
}
cout << endl;
for (int i = 0; i < vertex_size; i++) {
cout << "Vertex " << i << " is in set " << vertex_sets[i] << endl;
}
}
그러나 어떤 이유는 vertex_sets 어레이 제 (INT J = 0 ... 루프 동안 변화, 그리고 나는이 입력
8
0
2
4 2
5 6
1
1
6 1
2
2
3 2
4 2
3
4
2 2
4 3
6 5
7 4
4
3
0 2
2 2
3 3
5
2
0 6
6 2
6
3
1 1
3 5
5 2
7
1
3 4
내가의 출력을 얻을으로., 따라서 인쇄 문을 어떻게 왜 안 확신
Assigning vertex set 0
Vertex 0 is in set 0
Vertex 0 is in set 0
Assigning vertex set 1
Vertex 1 is in set 1
Vertex 0 is in set 0
Assigning vertex set 2
Vertex 2 is in set 2
Vertex 0 is in set 0
Assigning vertex set 3
Vertex 3 is in set 3
Vertex 0 is in set 3
Assigning vertex set 4
Vertex 4 is in set 4
Vertex 0 is in set 3
Assigning vertex set 5
Vertex 5 is in set 5
Vertex 0 is in set 3
Assigning vertex set 6
Vertex 6 is in set 6
Vertex 0 is in set 3
Assigning vertex set 7
Vertex 7 is in set 7
Vertex 0 is in set 3
Vertex 0 is in set 3
Vertex 1 is in set 2
Vertex 2 is in set 4
Vertex 3 is in set 3
Vertex 4 is in set 4
Vertex 5 is in set 5
Vertex 6 is in set 6
Vertex 7 is in set 7
이것은 루프의 네 번째 반복 동안 어떤 이유로 인덱스 0의 vertex_sets 값이 0에서 3으로 변경된다는 것을 의미하며 그 이유는 알 수 없습니다. 왜 이런 일이 일어나는 지 알 수 있습니까?
초기화하기 전에 'vertex_size'를 할당 크기로 3 라인으로 사용하는 것은 좋은 생각이 아닙니다. – Aesthete
좋은 캐치. 그것은 문제의 일부일 수 있습니다. – aftrumpet
이 코드는 g ++에서 그대로 실행되지 않습니다. 나는 'std :: bad_alloc'의 인스턴스를 던진 후에 호출을 종료하려고한다. what() : std :: bad_alloc Aborted – RPGillespie