我正在编写一个简单的C程序来使用邻接列表来实现图形.我的节目如下.我正在使用vector,其中每个索引都是一个顶点.向量中的每个槽存储指向Edge_obj的指针,Edge_obj是邻接列表中链接列表的对象.
但是当我使用print_graph()打印图形的第一个边缘时,我得到了 –
0 – > 2087138040
我期待0 – > 3.
以下代码有什么问题?
#include<iostream>
#include<vector>
#include <forward_list>
using namespace::std;
class Edge_obj {
public:
int V;
Edge_obj* next;
Edge_obj(int V, Edge_obj* next);
};
Edge_obj::Edge_obj(int V, Edge_obj* next):V(V),next(next) {}
class Graph {
public:
int V;
vector< Edge_obj* > VC;
Graph(int v);
void add_edge(int v1, int v2);
void print_graph ();
};
Graph::Graph(int v):V(v),VC(v,nullptr) {}
void Graph::add_edge(int v1, int v2) {
Edge_obj obj (v2, VC[v1]);
VC[v1] = &obj;
}
void Graph::print_graph() {
cout<<"0-->"<<VC[0]->V;
}
int main()
{
Graph oho(4);
oho.add_edge(0,1);
oho.add_edge(0,2);
oho.add_edge(0,3);
oho.print_graph();
return 0;
}
最佳答案 你的VC存储本地对象指针,这会导致未定义的行为.
您可以尝试通过这种方式修复:
VC[v1] = new Edge_obj(v2, VC[v1]);
或者是其他东西.请注意,您应该在使用后删除它.或者您可以使用像unique_ptr这样的智能指针进行内存管理.