C++ 如何使用矢量的矢量来读取图形? #包括 #包括 使用名称空间std; 无效加法(矢量调整,整数,整数); 空打印图(矢量调整); int main() { 向量adj(4); addEdge(adj,1,2);//从节点1到节点2的边 附录(adj,1,3); 附录(adj,1,4); 附录(调整,2,3); 附录(第3,4节); 打印图形(adj); 返回0; } 无效加法(向量调整,整数u,整数v) { 形容词[u]。推回(v); } 空打印图(矢量调整) { 对于(int i=0;i
使用C++ 如何使用矢量的矢量来读取图形? #包括 #包括 使用名称空间std; 无效加法(矢量调整,整数,整数); 空打印图(矢量调整); int main() { 向量adj(4); addEdge(adj,1,2);//从节点1到节点2的边 附录(adj,1,3); 附录(adj,1,4); 附录(调整,2,3); 附录(第3,4节); 打印图形(adj); 返回0; } 无效加法(向量调整,整数u,整数v) { 形容词[u]。推回(v); } 空打印图(矢量调整) { 对于(int i=0;i,c++,c++11,stl,graph-algorithm,C++,C++11,Stl,Graph Algorithm,使用向量的向量可以编写 `vector<vector<int> > adj` or `list<list<int> > adj` std::vector adj(5);//注:圆括号 这是因为标准向量有一个构造函数,它接受请求的大小作为参数,并默认初始化所有元素 作为adj向量的向量,adj的元素将被初始化为空向量,您可以稍后用推回填充,以使用您可以编写的向量的向量 `vector<vector<int> > ad
向量
的向量
可以编写
`vector<vector<int> > adj` or `list<list<int> > adj`
std::vector adj(5);//注:圆括号
这是因为标准向量有一个构造函数,它接受请求的大小作为参数,并默认初始化所有元素
作为
adj
向量的向量,adj
的元素将被初始化为空向量,您可以稍后用推回
填充,以使用您可以编写的向量的向量
`vector<vector<int> > adj` or `list<list<int> > adj`
std::vector adj(5);//注:圆括号
这是因为标准向量有一个构造函数,它接受请求的大小作为参数,并默认初始化所有元素
作为向量的向量,adj
的元素将被初始化为空向量,您可以稍后使用基于零的索引填充push_
向量。adj[0]
是向量中的第一个元素
向量也以无大小开始。在添加一个元素之前,将不会有adj[0]
元素
在尝试调用adj[u]之前,您可能需要adj.resize(4)
。向后推(v)
向量使用基于零的索引。adj[0]
是向量中的第一个元素
向量也以无大小开始。在添加一个元素之前,将不会有adj[0]
元素
在尝试调用adj[u]之前,您可能需要adj.resize(4)
。向后推(v)
创建向量adj时,您有一个空向量。在函数addEdge中,您可以访问adj中索引u处的条目。但请记住,这是一个空向量。这就是崩溃的原因
我假设你的函数addEdge应该给你正在创建的邻接矩阵添加一个条目。在这之前,你需要为该矩阵创建空间。这意味着,你需要在你的邻接向量中为它将包含的向量留出空间,你还需要在这些向量中留出空间,在这些向量中你可以放置边缘信息
但一旦设置了向量,打印函数仍将打印所有0,因为函数addEdge会复制要传递的向量,然后写入该副本。原始调整向量将保持不变。如果要修改原始向量,请确保通过指针传递向量。创建向量调整时,您需要有一个空向量。在你的函数addEdge中,你可以访问adj中索引u处的条目。但是记住,那是一个空向量。这就是你崩溃的原因
我假设你的函数addEdge应该给你正在创建的邻接矩阵添加一个条目。在这之前,你需要为该矩阵创建空间。这意味着,你需要在你的邻接向量中为它将包含的向量留出空间,你还需要在这些向量中留出空间,在这些向量中你可以放置边缘信息
设置向量后,打印函数仍将打印所有0,因为函数addEdge会复制要传递的向量,然后写入该副本。原始调整向量将保持不变。如果要修改原始向量,请确保通过指针传递向量。您的addEdge版本
将adj
作为副本。您操作该副本,然后在函数返回时销毁该副本。您需要使用引用访问外部adj:
std::vector<std::vector<int>> adj(5); // Note: round parentheses
void addEdge(向量&adj,int u,int v)
{
形容词[u]。推回(v);
}
和使用:
void addEdge(vector<vector<int> >& adj, int u , int v)
{
adj[u].push_back(v);
}
void print_图(const vector&adj)
为了避免另一个副本您的addEdge版本将adj
作为副本。您操作该副本,然后在函数返回时销毁该副本。您需要使用引用访问外部adj:
std::vector<std::vector<int>> adj(5); // Note: round parentheses
void addEdge(向量&adj,int u,int v)
{
形容词[u]。推回(v);
}
和使用:
void addEdge(vector<vector<int> >& adj, int u , int v)
{
adj[u].push_back(v);
}
void print_图(const vector&adj)
为避免再次复制感谢您的回复。我已按照您所说的方式进行了更改,但没有得到输出。输出屏幕为空。我已检查,在print_graph()中,最内层for循环不工作。控件未进入最内层for循环(这就是为什么屏幕上没有打印任何内容)为什么??谢谢你的回复。我已经改变了你说的方式,但我没有得到输出。输出屏幕是空白的。我已经检查了,在print_graph()中,最内层的for循环不工作。控件没有进入最内层的for循环(这就是为什么屏幕上没有打印内容)为什么??