Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/28: Рейтинг темы: голосов - 28, средняя оценка - 4.79
SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
1

рекурсивный перебор

22.07.2012, 18:38. Просмотров 5170. Ответов 1
Метки нет (Все метки)

Дана строка, состоящая из M (2 ≤ M ≤ 8) попарно различных символов (буквы латинского алфавита и цифры). Требуется вывести все перестановки символов данной строки в алфавитном порядке.
Ввод:
AB
Вывод:
AB
BA
Ввод:
IOX
Вывод:
IOX
IXO
OIX
OXI
XIO
XOI
Внимание: перебор должен быть РЕКУРСИВНЫМ и понятным. Если что, напишите с комментариями.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2012, 18:38
Ответы с готовыми решениями:

рекурсивный НОД
Даны натуральные числа n, m. Найти НОД(n,m), используя рекурсивную процедуру вычислентя Нод,...

рекурсивный алгоритм
Здравствуйте! Простая программа, но выдает ошибку: recurs5.pas (5,8) Fatal: Systax error, ''=''...

Рекурсивный спуск
Вводится с клавиатуры непустая последовательность из n положительных, вещественных чисел. Используя...

факториал ( c рекурсивный функцией )
uses crt; function faktorial(n:integer):integer; begin if n=0 then faktorial:=1 else...

Рекурсивный сдвиг массива
Доброго времени суток!!! Помогите пожалуйста!!! Дан массив x, состоящий из 10 вещественных...

1
vkostik
4 / 4 / 1
Регистрация: 22.07.2012
Сообщений: 10
22.07.2012, 20:10 2
Лучший ответ Сообщение было отмечено SeryZone как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var s:string; // строка символов
    used:array[0..10] of boolean; // метка того, использовали ли мы элемент под номером i в перестановке
    a:array[0..10] of longint; // текущая перестановка
    i,n,j:longint; // n - длина строки, i,j - счетчики
    ch:char;
 
procedure dfs(v:longint); // процедура генерации
var i:longint; // счетчик
begin 
 if (v=n+1) // если перестановка сгенерирована
  then
   begin
    for i:= 1 to n do
     write(s[a[i]]);  // то выводим ее посимвольно
     writeln;
    exit;
   end;
  for i:= 1 to n do // иначе ищем элемент, который мы поставим на v-ое место
   if used[i] then // если элемент не использован
    begin
     a[v]:=i; // то ставим его на v-ое место
     used[i]:=false; // метим, что это элемент мы брали
     dfs(v+1); // переходим на следующую позицию
     used[i]:=true; // откат обратно
    end;
end;
 
 
begin
 readln(s); // ввод строки
 n:=length(s); // длина строки
 for i:= 1 to n-1 do  
  for j:= 1 to n-i do
   if (s[j]>s[j+1]) // это сортировка символов строки, потому что перестановки генерируются в алфавитном порядке
     then
      begin
       ch:=s[j];
       s[j]:=s[j+1];
       s[j+1]:=ch;
      end;
 for i:= 1 to n do
  used[i]:=true; // обнуление
 dfs(1); // запуск рекурсии
end.
Если что не понятно, пишите.
3
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 20:10

Разработать рекурсивный алгоритм: f(n)=1/(n+5)!
Напишите плизз весь код программки и модуля)) Разработать рекурсивный алгоритм и программу...

Рекурсивный вывод массива
Написать программу, осуществляющую вывод массива на экран с помощью рекурсии.

Рекурсивный алгоритм поиска перестановок
Реализуйте рекурсивный алгоритм поиска перестановок


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.