БлогNot. C++: вывести все корректные комбинации пар круглых скобок

C++: вывести все корректные комбинации пар круглых скобок

В отличие от проверки правильности расстановок скобок в строке, здесь мы выводим все возможные комбинации корректной расстановки скобок.

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n пар скобок, которые закрываются и открываются.

Что любопытно, зависимость количества расстановок от количества пар скобок n даёт типичные числа Каталана, они же A000108.

Проверено в консоли Visual Studio 2015.

#include <iostream>
using namespace std;

#define MAX_SIZE 256 /* используем просто статический буфер */

void bracketir(int pos, int n, int open, int close) {
 static char str[MAX_SIZE];
 static int cnt;
 if (close == n) {
  cout << ++cnt << ". " << str << endl;
  return;
 }
 else {
  if (open > close) {
   str[pos] = ')';
   bracketir(pos + 1, n, open, close + 1);
  }
  if (open < n) {
   str[pos] = '(';
   bracketir(pos + 1, n, open + 1, close);
  }
 }
}

int main() {
 int n = 10;
 bracketir(0,n,0,0);  //брекетир - это такой маленький рэкетир с брекетами
 cin.get(); return 0;
}

28.02.2018, 12:58 [2596 просмотров]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым