using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Permutation
{
public class Program
{
public static string Permutations(uint NumberElementPermutation)
{
String permutation = String.Empty; // создаем пустую строку
if (NumberElementPermutation != 0)
{
uint[] ArrayPermutation = new uint[NumberElementPermutation + 1];
for (uint i = 0; i <= NumberElementPermutation; i++) // заполняем массив по возврастанию
ArrayPermutation[i] = i;
uint ElementLessNext = 1;
while (ElementLessNext != 0)
{
for (ElementLessNext = 1; ElementLessNext <= NumberElementPermutation; ElementLessNext++)/////////////////////////////////
permutation += " " + ArrayPermutation[ElementLessNext];//////////////////////////////////////////////////////////
permutation += "\n";
ElementLessNext = NumberElementPermutation - 1;
while (ArrayPermutation[ElementLessNext] >= ArrayPermutation[ElementLessNext + 1]) /// ищем элемент, который будет меньше правого
--ElementLessNext;
uint ElementMoreElementLessNext = NumberElementPermutation;
while (ArrayPermutation[ElementLessNext] >= ArrayPermutation[ElementMoreElementLessNext]) // пока элемент, который будет изменен больше правого, двигаемся влево
--ElementMoreElementLessNext;
uint ElementTransposition = ArrayPermutation[ElementLessNext];
ArrayPermutation[ElementLessNext] = ArrayPermutation[ElementMoreElementLessNext];
ArrayPermutation[ElementMoreElementLessNext] = ElementTransposition;
ElementMoreElementLessNext = NumberElementPermutation;
uint ElementNextElementLessNext = ElementLessNext + 1;
while (ElementMoreElementLessNext > ElementNextElementLessNext) //пока следущий больше предыдущего
{
ElementTransposition = ArrayPermutation[ElementMoreElementLessNext]; //заполняем массив после элемента, который мы поставили на место, в порядке возрастания
ArrayPermutation[ElementMoreElementLessNext] = ArrayPermutation[ElementNextElementLessNext];
ArrayPermutation[ElementNextElementLessNext] = ElementTransposition;
--ElementMoreElementLessNext;
++ElementNextElementLessNext;
}
}
return permutation;
}
else
{
return "Ошибка! Введите натуральное число.";
}
}
static void Main(string[] args)
{
}
}
}
Алгоритм порождения перестановок в лексикографическом порядке. (сделал прогу для цифр, как переделать символов(c#))
Модератор: Модераторы разделов
-
Smil1k
- Сообщения: 1
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Алгоритм порождения перестановок в лексикографическом порядке.
0. Есть тэг code для вставки кода.
1. Изменить тип массива uint[] на char[]. И зависимые переменные (вроде ElementTransposition) с uint на char.
2. Заменить ArrayPermutation[i] = i; на ArrayPermutation[i] = (char)('A' + i);
Ну или другой начальный символ выбрать.
1. Изменить тип массива uint[] на char[]. И зависимые переменные (вроде ElementTransposition) с uint на char.
2. Заменить ArrayPermutation[i] = i; на ArrayPermutation[i] = (char)('A' + i);
Ну или другой начальный символ выбрать.
Спасибо сказали: