Алгоритм порождения перестановок в лексикографическом порядке. (сделал прогу для цифр, как переделать символов(c#))

Модератор: Модераторы разделов

Smil1k
Сообщения: 1

Алгоритм порождения перестановок в лексикографическом порядке.

Сообщение Smil1k »

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)
{
}
}
}
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Алгоритм порождения перестановок в лексикографическом порядке.

Сообщение NickLion »

0. Есть тэг code для вставки кода.

1. Изменить тип массива uint[] на char[]. И зависимые переменные (вроде ElementTransposition) с uint на char.
2. Заменить ArrayPermutation[i] = i; на ArrayPermutation[i] = (char)('A' + i);
Ну или другой начальный символ выбрать.
Спасибо сказали: