Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cstdlib>
- #include <stdio.h>
- std::vector<std::vector<int>> read(int len);
- void print(const std::vector<std::vector<int>> & data, int len);
- void next(int len);
- int main() {
- /*
- В одной папке с программой должен лежать файл file4.txt со следующим содержанием:
- 6
- 1 2 3 4
- 1 2 4 3
- 1 3 2 4
- 1 3 4 2
- 1 4 2 3
- 1 4 3 2
- */
- int low = 4, high = 12;
- for (int len = low; len < high; ++len)
- next(len);
- return 0;
- }
- bool correct_pos(int pos, const std::vector<int> & v) {
- if (pos >= (int) v.size()) return false;
- if (pos == (int) v.size()-1 && abs(v[pos] - v[pos-1]) <= 3) return true;
- if (pos == 0 && abs(v[pos]-v[pos+1]) <= 3) return true;
- if (abs(v[pos]-v[pos-1]) <= 3 && abs(v[pos]-v[pos+1]) <= 3) return true;
- return false;
- }
- void print(const std::vector<std::vector<int>> & data, int len) {
- char output[100];
- sprintf(output, "file%d.txt", len);
- FILE * file_out = fopen(output, "wt");
- fprintf(file_out, "%d\n", (int) data.size());
- for (auto & row : data) {
- for (auto & it : row)
- fprintf(file_out, "%d ", it);
- fprintf(file_out, "\n");
- }
- fclose(file_out);
- }
- void next(int len) {
- auto data = read(len);
- std::vector<std::vector<int>> answer (3 * (int)data.size(), std::vector<int>(len+1));
- int count = 0;
- std::vector<int> temp (len+1);
- for (auto & row : data) {
- for (int i = 0; i < len; ++i)
- temp[i] = row[i];
- temp[len] = len+1;
- for (int i = len; i > 0; --i) {
- if (correct_pos(i, temp)) {
- for (int j = 0; j <= len; ++j)
- answer[count][j] = temp[j];
- count++;
- }
- std::swap(temp[i], temp[i-1]);
- }
- }
- answer.resize(count);
- print(answer, len+1);
- }
- std::vector<std::vector<int>> read(int len) {
- char input[100];
- sprintf(input, "file%d.txt", len);
- FILE * file_in = fopen(input, "rt");
- int count;
- fscanf(file_in, "%d", &count);
- std::vector<std::vector<int>> data(count, std::vector<int>(len));
- for (auto & row : data)
- for (auto & it : row)
- fscanf(file_in, "%d", &it);
- fclose(file_in);
- return data;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement