Форум программистов, компьютерный форум CyberForum.ru

Не могу найти ошибку в коде, генерирующего всевозможные перестановки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Указатель на объект из указателя на член класса http://www.cyberforum.ru/cpp-beginners/thread1714236.html
Что как-то сей вопрос ставит меня в тупик. class A { int i; } obj; int main()
C++ Как процедуру в Паскале реализовать, как функцию в с++? Здравствуйте! Есть код на Паскале. Нужно процедуру реализовать в С++ как функцию. Возможно ли в моем случае? Попробовал по-всякому, но у меня выводит только единицы. program razbienie_mnozhestwa(input,output); var i,j,k,n:byte;wper:arrayof boolean; sled,pred,blok:arrayof byte; procedure write_razbienie; {процедура, выписывающая разбиение на экран} var i,j:byte; begin j:=1; {номер... http://www.cyberforum.ru/cpp-beginners/thread1714228.html
Как найти отношение 3-х, а ну двух чисел, между собой? C++
Допустим, если я хочу узнать, во сколько раз число A больше/меньше числа B, я просто разделю А на B (A/B), а что делать, если дано 3 числа? Дано: a, b, c Нужно вычислить какое - то одно число, которое бы говорило бы о степени взаимных отношений, то есть во сколько раз a,b и с больше или меньше сами себя что ли.. То есть для этих трёх должно быть одно число, которое бы харрактеризовало...
C++ Удалить из массива все нулевые элементы
Помогите кто знает. Пожалуйста. Сформировать и распечатать динамический одномерный массив( число элементов запросить у пользователя). Заполнить случайными числами от -5 до 5. Удалить из массива все нулевые элементы. Новый массив должен занимать столько памяти, сколько ему необходимо. Распечатать новый массив. Буду очень благодарен т
C++ Создать новую матрицу, скопировав её из исходной; заполнить 30% новой матрицы нулями в случайном порядке http://www.cyberforum.ru/cpp-beginners/thread1714185.html
Задание 3 скопировать 2-мерный массив и 30% чисел в нем заполнить нулями (в случайном порядке)
C++ Из заданного одномерного массива создать матрицу и заполнить её по условию Ребята,помогите пожалуйста Задание 2 Из полученного массива приложение создает 2-мерный массив, с размерностью первого массива (например первый массив получился из 10 элементов, значит 2-мерный будет 10х10) подробнее

Показать сообщение отдельно
FasterHarder
1 / 1 / 0
Регистрация: 28.04.2015
Сообщений: 55
18.04.2016, 08:58     Не могу найти ошибку в коде, генерирующего всевозможные перестановки
Всем привет!
Условие задачи: задано множество, состоящие из натуральных чисел от 1 до n с шагом 1. Например: {1, 2, 3, 4, 5}. Получить всевозможные перестановки заданного множества в лексикографическом порядке с использованием рекурсии.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    using namespace std;
    void swap(int *pv, int pi, int pj);
    //--------------------------------------------------
    void printSet(int *pv, int pn)
    {
        for(int i = 0; i < pn; i++)
            cout << pv[i];
        cout << "\t";
    }
    //--------------------------------------------------
    void permute(int *pv, int pi, int pn)
    {
        if(pi == pn)
            printSet(pv, pn);
        else
        {
            for(int j = pi; j < pn; j++)
            {
                swap(pv, pi, j);
                permute(pv, pi + 1, pn);
                swap(pv, pi, j);
            }
        }
    }
    void swap(int *pv, int pi, int pj)
    {
        int tmp = pv[pi];
        pv[pi] = pv[pj];
        pv[pj] = tmp;
    }
    void main()
    {
        int *v = new int[5];
        for(int i = 0; i < 5; i++)
            v[i] = i + 1;
        permute(v, 0, 5);
        delete []v;
    }
После выполнения программа выдает всевозможные перестановки корректно, но кое-где сбивается лексикографический порядок.
Например, идет последовательность (из 5 элементов): 12345, 12354, 12435, 12453, 12543, 12534!! Последнее слагаемое должно идти раньше предыдущего. И таких нестыковок множество.

Подскажите, где проблема в коде, которая нарушает лексикографический порядок.
Буду признателен.

P.S. кстати из инета достаточно много ссылок по реализации данного алгоритма на данный форум, но:
1. Либо сделано итерационно, а не рекурсионно
2. Не соблюдается лексикографический порядок
3. Либо с использованием стандартной функции (типа next_permutation), а мне нужно с нуля этот велосипед сделать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru