上海市盘算机学会比赛平台2022年7月月赛丙组匹配括号(三) ...

打印 上一主题 下一主题

主题 762|帖子 762|积分 2286

题目形貌

如果字符序列仅由 ( 与 ) 构成,则在满足以下条件时,它是匹配的:


  • 空序列是匹配的;
  • 如果括号序列 s 是匹配的,那么 (s) 也是匹配的;
  • 如果括号序列 s 与 t 是匹配的,那么 st 也是匹配的。
给定一个整数 nn,请输出 nn 个左括号与 nn 个右括号可以组成的所有匹配括号序列,并且按照字典序将它们输出(如果超过 10001000 种,则仅输出前 10001000 种。)
输入格式

单个整数:表示 nn
输特别式

多少行:每行表示一种由 nn 对括号组成的匹配括号序列,按照字典序分列,如果超过 10001000 种,则仅输出前 10001000 种序列。
数据范围



  • 1≤n≤501≤n≤50
样例数据

输入:
2
输出:
(())
()()
输入:
3
输出:
((()))
(()())
(())()
()(())
()()()
详见代码:
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. char c[105];
  5. int cnt=0;
  6. void dfs(int step, int k)
  7. {
  8.     if (cnt>=1000) return;
  9.     if (step > 2 * n)
  10.     {
  11.         for(int i = 1; i <= n * 2; i++)
  12.         {
  13.             cout<<c[i];
  14.         }
  15.         cout << endl;
  16.         cnt++;
  17.         return;
  18.     }
  19.     if (k + 1 <= 2 * n - step)
  20.     {
  21.         c[step] = '(';
  22.         dfs(step + 1, k + 1);
  23.     }
  24.     if (k > 0)
  25.     {
  26.         c[step] = ')';
  27.         dfs(step + 1, k - 1);
  28.     }
  29.     return;
  30. }
  31. int main()
  32. {
  33.     cin >> n;
  34.     dfs(1, 0);
  35.     return 0;
  36. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表