作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想问他为什么将list<int> *adj
视为邻接列表数组。我认为这只是一个动态数组,而不是列表数组?有人可以解释一下吗?
// Program to print BFS traversal from a given
// source vertex. BFS(int s) traverses vertices
// reachable from s.
#include<iostream>
#include <list>
using namespace std;
// This class represents a directed graph using
// adjacency list representation
class Graph
{
int V; // No. of vertices
// Pointer to an array containing adjacency
// lists
list<int> *adj;
public:
Graph(int V); // Constructor
// function to add an edge to graph
void addEdge(int v, int w);
// prints BFS traversal from a given source s
void BFS(int s);
};
Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}
最佳答案
I want to ask why he considers
list<int> *adj;
is an array of adjacencylists ....
list<int>
的指针。指针不是数组。
I think this is only a dynamic array but not array of lists ?
std::list<int>
对象的连续缓冲区,因此使用了术语“动态数组”。
adj = new list<int>[V];
在
Graph
构造函数中。这将在连续内存中创建
V
std::list<int>
对象,并且
adj
将指向列表中的第一个对象。
std::vector<std::list<int>>
。
std::vector
的用法将
new[]
和delete[]
Graph
类存在内存泄漏。如果您在玩具程序中以外的任何地方使用它,则在编写适当的复制语义之前,通过编写用户定义的复制构造函数,用户定义的赋值运算符和析构函数,它很快就变得无法使用。
Graph
类的重写:
#include <iostream>
#include <list>
#include <vector>
class Graph
{
std::vector<std::list<int>> adj;
public:
Graph(int V);
void addEdge(int v, int w);
void BFS(int s);
};
Graph::Graph(int V) : adj(V) {}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
// and if you want to add some debugging for boundary conditions,
// replace previous line with
// adj.at(v).push_back(w);
}
整个类可以在任何上下文中安全使用。请注意,不需要
V
成员变量,因为
adj.size()
知道
V
是什么。
关于c++ - 来自Geeks for Geeks网站的有关BFS的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63534716/
我希望实现某种“ Canvas ”,您可以在其中将 X 数量的 TextViews/Links 放置在“随机位置”(如下图所示)。然后,您将能够连续向左或向右滚动此“ Canvas ” View ,并
各位高手,这是我用C语言编写的先到先得调度程序。 对于像 - 这样的输入4 0 0 0 0 1 2 3 4 和像- 这样的输入5 0 1 2 3 4 4 3 1 2 5 当我尝试在我的 Ubuntu
我是一名优秀的程序员,十分优秀!