我写了这段代码并抛出:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
每当我在queue<int> q
函数中声明deque<int> q1
(或shortest_reach()
)时,我都会收到此错误,并且只要我对该行发表评论,代码就可以正常运行。我没有给出非常大的输入(因此它不需要大内存),但我仍然得到这个错误。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <deque>
#include <queue>
using namespace std;
class Graph {
vector <vector <int> > adj;
public:
Graph(int n) {
adj.reserve(n);
}
void add_edge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
void shortest_reach(int start, int n, vector<int> &dist) {
// queue<int> q;
// deque<int> q1;
}
};
int main() {
int queries;
cin >> queries;
for (int t = 0; t < queries; t++) {
int n, m;
cin >> n;
// Create a graph of size n where each edge weight is 6:
Graph graph(n);
cin >> m;
// read and set edges
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
u--, v--;
// add each edge to the graph
graph.add_edge(u, v);
}
int startId;
cin >> startId;
startId--;
// Find shortest reach from node s
vector<int> distances(n);
graph.shortest_reach(startId, n, distances);
for (int i = 0; i < distances.size(); i++) {
if (i != startId) {
if(distances[i]!=0)
cout << distances[i]*6 << " ";
else
cout << -1 << " ";
}
}
cout << endl;
}
return 0;
}
这是我提供的输入:
2
4 2
1 2
1 3
1
3 1
2 3
2
第一行告诉测试用例的数量,然后描述每个测试用例。每个测试用例的第一行包含图中顶点和边的数量,边沿在以下行中描述。每个测试用例的最后一行指定了我必须执行的某个任务的起始顶点。
注意:我已经尝试在两台不同的计算机上运行它,我也遇到了同样的错误。