Merge pull request #4 from allemangD/bad_alloc_bugfix

Bad alloc bugfix
This commit is contained in:
2019-09-13 22:22:29 -04:00
committed by GitHub

View File

@@ -7,12 +7,12 @@
struct Table { struct Table {
int N; int N;
std::vector<std::vector<int>> fwd; std::vector<std::vector<int>> fwd{};
std::vector<std::vector<int>> rev; std::vector<std::vector<int>> rev{};
explicit Table(int N) { explicit Table(int N) {
add_row();
this->N = N; this->N = N;
add_row();
} }
void add_row() { void add_row() {
@@ -52,35 +52,35 @@ struct Table {
} }
std::vector<std::vector<int>> words() { std::vector<std::vector<int>> words() {
std::vector<std::vector<int>> vecs(size()); std::vector<std::vector<int> *> vecs(size());
std::vector<bool> done_vecs(size()); vecs[0] = new std::vector<int>();
done_vecs[0] = true;
bool done = false;
while (!done) {
done = true;
while (std::find(vecs.begin(), vecs.end(), nullptr) != vecs.end()) {
for (int from = 0; from < (int) vecs.size(); ++from) { for (int from = 0; from < (int) vecs.size(); ++from) {
if (done_vecs[from]) { std::vector<int> *word = vecs[from];
done = false; if (word == nullptr) {
continue; continue;
} }
std::vector<int> word = vecs[from];
for (int gen = 0; gen < (int) N; ++gen) { for (int gen = 0; gen < (int) N; ++gen) {
int to = get(from, gen); int to = get(from, gen);
if (done_vecs[to]) { if (vecs[to] != nullptr) {
continue; continue;
} }
done_vecs[to] = true; vecs[to] = new std::vector<int>(*word);
vecs[to].assign(word.size() + 1, gen); vecs[to]->push_back(gen);
std::copy(word.begin(), word.end(), vecs[to].begin());
} }
} }
} }
return vecs; std::vector<std::vector<int>> res(size());
for (int i = 0; i < (int) size(); ++i) {
res[i] = *vecs[i];
delete vecs[i];
}
return res;
} }
}; };