【发布时间】:2022-01-13 00:33:12
【问题描述】:
我正在尝试从顶点、边和单个连接的输入创建邻接列表。输入如下所示:
3 2(顶点、边)
1 2(连接)
1 3
现在,我的代码是
int vertices, edges;
scanf("%d %d", &vertices, &edges);
vector<vector<int>> storage[vertices+1];
for (int i = 0; i < edges; i++) {
int a, b;
scanf("%d %d", &a, &b);
if (find(storage[b].begin(), storage[b].end(), a) != storage[b].end() == false) {
storage[b].push_back(a);
}
if (find(storage[a].begin(), storage[a].end(), b) != storage[a].end() == false) {
storage[a].push_back(b);
}
}
是否有更快/更有效的方法来做到这一点,或者这是最好的方法?
【问题讨论】:
-
vector<int> storage[vertices+1];不是标准 C++。仅当您使用编译器特定的 C++ 扩展时,才可能使用可变长度数组。另见Why aren't variable-length arrays part of the C++ standard? -
vector<int> storage[vertices+1];-- 我猜你没有意识到std::vector的用途。如果你这样做了,那么这应该是std::vector<std::vector<int>> storage(vertices + 1); -
奇怪。它们都有效。
-
这并不奇怪。这是一个编译器扩展,它完全适用于您的编译器。但它不便携,因此不受欢迎。
-
尝试将
vertices设置为 10 亿,看看你如何处理这个可变长度数组......
标签: c++ arrays adjacency-list