我初始化一个指针向量,每个指针指向一个邻居列表,以实现Graph的邻接列表表示。
class Graph
{
public:
Graph(int V) : vertices(V) {}
// Member functions for Graph class
void addEdge();
void print();
void type(string);
private:
vector<list<int> *> vertices;
};
addEdge函数要求用户从哪个顶点进入另一个顶点。我认为在填充向量时某处存在错误。
void Graph::addEdge()
{
int v, w;
cout << "\nvertex: ";
cin >> v;
cout << "\nadjacent: ";
cin >> w;
vertices[v]->push_back(w);
}
如果这是填充我引入的数据结构的正确方法,我需要帮助!如果没有,那么执行任务的正确方法是什么?
答案 0 :(得分:1)
我建议您使用std::vector<std::vector>
作为图表的adjacency matrix,我建议您不要将UI与您的课程混合使用(请参阅下面的代码):
class Graph
{
public:
Graph(std::size_t const n_vert) : adjmat(n_vert, std::vector<int>(n_vert)) {}
// Member functions for Graph class
void addEdge(std::size_t const from, std::size_t const to, int const weight);
void print();
void type(std::string);
private:
std::vector<std::vector<int>> adjmat;
};
void Graph::addEdge(std::size_t const from, std::size_t const to, int const weight = 1)
{
// or `adjmat.at(from).at(to)` for range checking
adjmat[from][to] = weight;
}
int main ()
{
Graph G(10);
int v, w;
std::cout << "\nvertex: ";
std::cin >> v;
std::cout << "\nadjacent: ";
std::cin >> w;
G.addEdge(v, w);
return 0;
}
对于小图表,建议使用此解决方案。