четверг, 25 июня 2015 г.

Алгоритм Нарайаны для 1С 8.2

Данный код реализует алгоритм Нарайаны на движке 1С 8.2.

Функция ВсеПерестановки(ЧислоЭлементов) Экспорт

	Результат = Новый Массив;
	Массив = Новый Массив;
	Для й=1 По ЧислоЭлементов Цикл
		Массив.Добавить(й);	
	КонецЦикла; 
	Результат.Добавить(Массив);
	
	Пока Истина Цикл
		Список = Новый СписокЗначений;
		Список.ЗагрузитьЗначения(Массив);
		Массив = Список.ВыгрузитьЗначения();
		
		Ключ = Неопределено;
		Для й=0 по ЧислоЭлементов-2 Цикл
			Если Массив[й]<Массив[й+1] Тогда
				Ключ = й;			
			КонецЕсли; 			
		КонецЦикла; 
		
		Если Ключ=Неопределено Тогда
			Прервать;		
		КонецЕсли; 
		
		Для й=1-ЧислоЭлементов По 0 Цикл
			Если Массив[Ключ]<Массив[-й] Тогда
				Прервать;			
			КонецЕсли; 		
		КонецЦикла; 	
		Поменять(Массив[Ключ],Массив[-й]);
		
		й = Ключ+1;
		к = ЧислоЭлементов-1;
		Пока й<к Цикл
			Поменять(Массив[й],Массив[к]);
			й = й+1;
			к = к-1;
		КонецЦикла; 
		
		Результат.Добавить(Массив);
		
	КонецЦикла; 
	
    Возврат Результат;
	
КонецФункции

Процедура Поменять(А,Б)

	Т = А;
	А = Б;
	Б = Т;

КонецПроцедуры