显示和添加邻接表图的方法
Display and add methods for adjacency list graph
这是我第三次在 C++ 中使用邻接表创建图形。使用 OOP 很重要。我觉得这个问题的答案真的很简单,但我无法修复和改进我的代码。
有:
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
struct Edge
{
int begin;
int end;
};
class Graph
{
private:
int numOfNodes;
vector<vector<int>> baseVec;
public:
Graph(int numOfNodes)
{
//baseVec->resize(numOfNodes, vector<int>(numOfNodes));
for (int i = 0; i < numOfNodes; i++)
{
vector<Edge> subVec;
baseVec.emplace_back(subVec);
}
}
void newEdge(Edge edge)
{
if (edge.begin >= numOfNodes && edge.end >= numOfNodes)
{
cout << "Invalid edge!\n";
}
baseVec[edge.begin].emplace_back(edge.end);
baseVec[edge.end].emplace_back(edge.begin);
}
void display()
{
cout << baseVec.size();
for (int i = 0; i < baseVec.size(); i++)
{
cout << "\n Adjacency list of vertex " << i << "\n head ";
for (int j = 0; j < baseVec[i].size(); j++)
{
cout << baseVec[i][j];
cout << endl;
}
}
}
};
int main()
{
int vertex, numberOfEdges, begin, end;
cout << "Enter number of nodes: ";
cin >> vertex;
numberOfEdges = vertex * (vertex - 1);
Edge edge;
Graph g1(vertex);
for (int i = 0; i < numberOfEdges; i++)
{
cout << "Enter edge ex.1 2 (-1 -1 to exit): \n";
cin >> edge.begin >> edge.end;
if ((begin == -1) && (end == -1))
{
break;
}
g1.newEdge(edge);
}
g1.display();
return 0;
}
所以现在 Visual Studio 我有一个错误:
'std::vector>::vector(const std::vector<_Ty,std::allocator<_Ty>> &)': cannot convert argument 1 from 'std::vector>' to 'const _Alloc &'
此外,在 display() 方法中存在 signed/unsigned 不匹配。我不知道我的方法是否有问题,但我被困在这里。
vector<vector<int>> baseVec;
接受 vector<int>
s
vector<Edge> subVec;
baseVec.emplace_back(subVec);
尝试喂食 vector<Edge>
次。这没有意义。
vector<vector<Edge>> baseVec;
更有意义。
请注意,此更改将在
时引发另一波错误
cout << baseVec[i][j];
尝试打印 edge
但不知道如何。 make an operator<<
overload to handle edge
或更改您正在输出的内容。
这是我第三次在 C++ 中使用邻接表创建图形。使用 OOP 很重要。我觉得这个问题的答案真的很简单,但我无法修复和改进我的代码。
有:
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
struct Edge
{
int begin;
int end;
};
class Graph
{
private:
int numOfNodes;
vector<vector<int>> baseVec;
public:
Graph(int numOfNodes)
{
//baseVec->resize(numOfNodes, vector<int>(numOfNodes));
for (int i = 0; i < numOfNodes; i++)
{
vector<Edge> subVec;
baseVec.emplace_back(subVec);
}
}
void newEdge(Edge edge)
{
if (edge.begin >= numOfNodes && edge.end >= numOfNodes)
{
cout << "Invalid edge!\n";
}
baseVec[edge.begin].emplace_back(edge.end);
baseVec[edge.end].emplace_back(edge.begin);
}
void display()
{
cout << baseVec.size();
for (int i = 0; i < baseVec.size(); i++)
{
cout << "\n Adjacency list of vertex " << i << "\n head ";
for (int j = 0; j < baseVec[i].size(); j++)
{
cout << baseVec[i][j];
cout << endl;
}
}
}
};
int main()
{
int vertex, numberOfEdges, begin, end;
cout << "Enter number of nodes: ";
cin >> vertex;
numberOfEdges = vertex * (vertex - 1);
Edge edge;
Graph g1(vertex);
for (int i = 0; i < numberOfEdges; i++)
{
cout << "Enter edge ex.1 2 (-1 -1 to exit): \n";
cin >> edge.begin >> edge.end;
if ((begin == -1) && (end == -1))
{
break;
}
g1.newEdge(edge);
}
g1.display();
return 0;
}
所以现在 Visual Studio 我有一个错误:
'std::vector>::vector(const std::vector<_Ty,std::allocator<_Ty>> &)': cannot convert argument 1 from 'std::vector>' to 'const _Alloc &'
此外,在 display() 方法中存在 signed/unsigned 不匹配。我不知道我的方法是否有问题,但我被困在这里。
vector<vector<int>> baseVec;
接受 vector<int>
s
vector<Edge> subVec;
baseVec.emplace_back(subVec);
尝试喂食 vector<Edge>
次。这没有意义。
vector<vector<Edge>> baseVec;
更有意义。
请注意,此更改将在
时引发另一波错误cout << baseVec[i][j];
尝试打印 edge
但不知道如何。 make an operator<<
overload to handle edge
或更改您正在输出的内容。