diff --git a/cosets/src/tc.cpp b/cosets/src/tc.cpp index 28eb419..12ca511 100644 --- a/cosets/src/tc.cpp +++ b/cosets/src/tc.cpp @@ -52,35 +52,34 @@ struct Table { } std::vector> words() { - std::vector> vecs(size()); - std::vector done_vecs(size()); - done_vecs[0] = true; - - bool done = false; - while (!done) { - done = true; + std::vector *> vecs(size()); + vecs[0] = new std::vector(); + while (std::find(vecs.begin(), vecs.end(), nullptr) != vecs.end()) { for (int from = 0; from < (int) vecs.size(); ++from) { - if (done_vecs[from]) { - done = false; + std::vector *word = vecs[from]; + if (word == nullptr) { continue; } - std::vector word = vecs[from]; for (int gen = 0; gen < (int) N; ++gen) { int to = get(from, gen); - if (done_vecs[to]) { + if (vecs[to] != nullptr) { continue; } - done_vecs[to] = true; - vecs[to].assign(word.size() + 1, gen); - std::copy(word.begin(), word.end(), vecs[to].begin()); + vecs[to] = new std::vector(*word); + vecs[to]->push_back(gen); } } } - return vecs; + std::vector> res(size()); + for (int i = 0; i < (int) size(); ++i) { + res[i] = *vecs[i]; + } + + return res; } };