Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c++] Рекурсия, перестановки


Автор: zall 5.5.2009, 13:04
Задача такая. С помощью рекурсии получить все перестановки элементов 1,2...6. на борланд С (вижуала в институте просто нету) и если можно как нибудь попроще. Поиск вроде юзал нашёл 1 тему но там так ничем и не закончилось

Автор: zim22 5.5.2009, 14:24
не рекурсивно конечно, но зато будет с чем сравнивать все возможные варианты перестановок smile
Код

#include <algorithm>
#include <iostream>

int main()
{
  int x[5] = {1, 2, 3, 4, 5};
  while (std::next_permutation(x, x + 5)) {
    std::copy(x, x + 5, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
  }
    return 0;
}


Автор: zall 5.5.2009, 14:35
да, во 1 не рекурсивно а во вторых сложно мы пространство имён ещё не прохоидили и итераторы тоже(

Автор: zall 5.5.2009, 22:49
нашёл вот такой код 

Код

#include <iostream>
using namespace std;
 
int A[]={1,2,3,4,5}; //ну, к примеру...
 
void Obrabotka(int *M,int n)
{
    for(int i=0;i<n;i++)cout<<M[i]<<" ";
    сout<<endl;
}
void swap(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
void Perestanovki(int *M,int n, int N)//M - массив, n - число переставляемых элементов, 
                                      //N - реальный размер массива  
{
    if(n==1)Obrabotka(M,N); //если нечего переставлять
    else 
    {
    for(int i=0;i<n;i++)
    {
          swap(M[i],M[n-1]); //меняем последний элемент с каждым,
                              //в том числе и с самим собой.
        Perestanovki(M,n-1,N); //запускаем функцию, для n-1 элементов
        swap(M[i],M[n-1]); //поигрались - и хватит. Надо вернуть массив в прежнее
                                           //состояние для следующего обмена элементов
    }
    }
}
int main()
{
    Perestanovki(A,5,5);
    return 0;
}


всё бы хорошо только это вижуал на котором я ещё ни разу не работал попытался переделать код под борланд без использывания std ничего дельного не получилось помогите пожалуйста этот же код только в борланде без std сделать

P.S. извиняюсь если сказал какую нибудь откровенную глупость.

Автор: Dov 6.5.2009, 06:16
Код
#include <iostream.h>

int    A[]    = { 1, 2, 3, 4, 5 }; //ну, к примеру...

void Obrabotka( int *M, int n )
{
    for( int i = 0; i < n; i++ )
        cout << M[i] << " ";
    cout << endl;
}
void swap( int &a, int &b )
{
    int    temp    = a;
    a = b;
    b = temp;
}
void Perestanovki( int *M, int n, int N )//M - массив, n - число переставляемых элементов, 
    //N - реальный размер массива
{
    if( n == 1 )
        Obrabotka( M, N ); //если нечего переставлять
    else
    {
        for( int i = 0; i < n; i++ )
        {
            swap( M[i], M[n - 1] ); //меняем последний элемент с каждым,
            //в том числе и с самим собой.
            Perestanovki( M, n - 1, N ); //запускаем функцию, для n-1 элементов
            swap( M[i], M[n - 1] ); //поигрались - и хватит. Надо вернуть массив в прежнее
            //состояние для следующего обмена элементов
        }
    }
}
int main()
{
    Perestanovki( A, 5, 5 );
    return 0;
}

Автор: zall 6.5.2009, 16:49
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)