@@ -7,12 +7,12 @@
|
||||
|
||||
struct Table {
|
||||
int N;
|
||||
std::vector<std::vector<int>> fwd;
|
||||
std::vector<std::vector<int>> rev;
|
||||
std::vector<std::vector<int>> fwd{};
|
||||
std::vector<std::vector<int>> rev{};
|
||||
|
||||
explicit Table(int N) {
|
||||
add_row();
|
||||
this->N = N;
|
||||
add_row();
|
||||
}
|
||||
|
||||
void add_row() {
|
||||
@@ -52,35 +52,35 @@ struct Table {
|
||||
}
|
||||
|
||||
std::vector<std::vector<int>> words() {
|
||||
std::vector<std::vector<int>> vecs(size());
|
||||
std::vector<bool> done_vecs(size());
|
||||
done_vecs[0] = true;
|
||||
|
||||
bool done = false;
|
||||
while (!done) {
|
||||
done = true;
|
||||
std::vector<std::vector<int> *> vecs(size());
|
||||
vecs[0] = new std::vector<int>();
|
||||
|
||||
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<int> *word = vecs[from];
|
||||
if (word == nullptr) {
|
||||
continue;
|
||||
}
|
||||
std::vector<int> 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<int>(*word);
|
||||
vecs[to]->push_back(gen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user