Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2016, 17:55   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Лексиграфический порядок элементов массива с++

Добрый день. Есть программа,которая находит все перестановки от 1 до n. Подскажите пожалуйста, как реализовать вывод элементов в лексиграфическом порядке. Спасибо
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <malloc.h>

void permutation( int *m, int l, int n )
{
  if( l==n-1 ) 
  {
    for( int i=0; i<n; i++) 
	  printf("%i ",m[i]);
    printf("\n");
  }
  else 
  {    
    for( int i=l; i<n; i++ )
    {
      int tmp = m[l];
      m[l] = m[i];
      m[i] = tmp;    
      permutation( m, l+1, n );
      tmp = m[l];
      m[l] = m[i];
      m[i] = tmp;    
    }
  }
}
 
int main()
{

  int n = 0;
  printf("Enter n\n");
  scanf("%i",&n);
 int *m  = (int*) malloc((n)*sizeof(int)); 
  for( int i=0; i<n; i++)
    m[i] = i+1; 
 
  permutation( m, 0, n ); 
   printf("\n");
 return 0;
}
Вероника99 вне форума Ответить с цитированием
Старый 29.09.2016, 14:30   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

ну, тут хоть видно, что первый параметр - алфавит...... кстати говоря, вот его не нужно менять нужно ввести ещё один параметр-массив, который хранит "префикс" перестановки.... далее идёт то же условие if(l==n-1), но в else мы меняем эл. префикса и вызываем рекурсию на новом префиксе и старом алфавите
Место под префикс можно выделить в main, проще будет
GreenWizard вне форума Ответить с цитированием
Старый 29.09.2016, 14:40   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

не тестировал! просто прикидка
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <malloc.h>

void permutation( int *m, int l, int n, int* prefix)
{
  if( l==n-1 ) 
  {
    for( int i=0; i<n; i++) {
		for( int i=0; i<n-1; i++) {
			printf("%i ",prefix[i]);
		}
		printf("%i\n",m[i]);
	}
  }
  else 
  {    
    for( int i=0; i<n; i++ )  {
		prefix[l] = m[i];
		permutation( m, l+1, n, prefix);
    }
  }
}
 
int main()
{
  int n = 0;
  printf("Enter n\n");
  scanf("%i",&n);
 int *m  = (int*) malloc((n)*sizeof(int)); 
  for( int i=0; i<n; i++)
    m[i] = i+1; 
 
 int *prefix  = (int*) malloc((n - 1)*sizeof(int)); 
  permutation( m, 0, n, prefix); 
   printf("\n");
   
   free(m);
   free(prefix)
 return 0;
}
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить z=s1+s2/2, где s1-сумма положительных элементов массива X(8); s2-сумма отрицательных элементов массива Y(10) . обе суммы Лидия 188 Паскаль, Turbo Pascal, PascalABC.NET 1 06.11.2015 18:44
Задание на проверку.Задание:Изменить порядок следования элементов массива на обратный. Valiev1 Помощь студентам 1 26.10.2015 20:06
Функция изменяет порядок элементов спика eymar Общие вопросы C/C++ 0 21.11.2012 23:16
порядок элементов массива Gordan007 Помощь студентам 0 17.12.2011 03:14
Поменять порядок следования отрицательных элементов на обратный JeyKip Общие вопросы C/C++ 1 14.01.2010 01:23