问题:给定一个正整n,作为括号的对数,输出所有括号可能的组合,如 n=2 (()) ()() n = 3的情况 ((())) (()()) (())() ()(()) ()()()
在之前的一篇文章中,我们采用了深度优先搜索的方式实现:(深度优先搜索)打印所有可能的括号组合
本博文中,我们将给出采用广度优先搜索的方式实现,程序如下:
public class ParenthesesGenerator { public void generateParentheses(int parenthesesCount) { bfs("", parenthesesCount, parenthesesCount); } /** * 采用深度搜索优先的方式 BFS(breadth-first search) * * @param currentParentheses * @param remanentLeftParenthesesRemain * @param remanentRightParenthesesRemain */ private void bfs(String currentParentheses, int remanentLeftParenthesesRemain, int remanentRightParenthesesRemain) { /** * 如果左括号数和右括号数都为0的时候,表示已经找到一种解决方式, 直接输出结果 */ if (remanentLeftParenthesesRemain == 0 && remanentRightParenthesesRemain == 0) { System.out.println(currentParentheses); } /** * 如果右括号剩余数大于左括号剩余数,则添加一个右括号,右括号剩余数减去1,然后递归调用自身 */ if (remanentRightParenthesesRemain > remanentLeftParenthesesRemain) { bfs(currentParentheses + ")", remanentLeftParenthesesRemain, remanentRightParenthesesRemain - 1); } /** * 如果左括号数还有剩余,则将当前括号组成字符添加一个左括号, 然后递归调用本身 */ if (remanentLeftParenthesesRemain > 0) { bfs(currentParentheses + "(", remanentLeftParenthesesRemain - 1, remanentRightParenthesesRemain); } } }
测试程序及其结果如下
public class ParenthesesGeneratorTest { public static void main(String[] args) { ParenthesesGenerator test = new ParenthesesGenerator(); for (int i = 1; i < 5; i++) { System.out.printf("有%d括号的所有组合:\n", i); test.generateParentheses(i); } } }
有1括号的所有组合: () 有2括号的所有组合: ()() (()) 有3括号的所有组合: ()()() ()(()) (())() (()()) ((())) 有4括号的所有组合: ()()()() ()()(()) ()(())() ()(()()) ()((())) (())()() (())(()) (()())() (()()()) (()(())) ((()))() ((())())
原文地址 http://thecodesample.com/?p=954
更多代码实例请访问 http://thecodesample.com/
相关推荐
易语言源码易语言广度优先搜索实现漫水法源码.rar 易语言源码易语言广度优先搜索实现漫水法源码.rar 易语言源码易语言广度优先搜索实现漫水法源码.rar 易语言源码易语言广度优先搜索实现漫水法源码.rar 易语言...
MATLAB源码集锦-基于BFS广度优先搜索算法代码
BFS DFS 深度优先搜索 广度优先搜索 图 输出所有路径 输出最短路径 随便输出一条可能的路径
广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。本程序用Matlab语言实现广度优先算法
二叉树的深度优先搜索与广度优先搜索的非递归方法实现
代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...
参考中国大学MOOC,计算机算法与程序设计,5.2节内容,实现Python广度优先求最短路径。课程该章节没有课件,我手敲的代码调试好了,供大家一起学习!!!
Problem A【一本通基础广度优先搜索】细胞 Problem B【一本通基础广度优先搜索】 最少步数 Problem C【一本通基础广度优先搜索】The Castle Problem D【一本通基础广度优先搜索】Dungeon Master Problem E【一本通...
邻接表表示的图的深度优先搜索和广度优先搜索程序
广度优先搜索例题及代码详解 通过广度优先搜索的题目练习初步掌握广度优先搜索的机理
本讲座就最短路径问题、分酒问题、八数码问题三个典型的范例,从问题分析、算法、数据结构等多方面进行了讨论,从而形成图的广度优先搜索解决问题的模式,通过本讲座的学习,能明白什么样的问题可以采用或转化为图的...
广度优先搜索构建迷宫(BFS算法)动态构建过程的python 源代码,详情请移步本人博客<迷宫与寻路可视化(二)广度优先搜索构建迷宫(BFS算法)>
广度优先搜索和宽度优先搜索的动画演示,均为gif图,大家可以自行看看,理解思路或者放Ppt里很好用,怎么分数是5分,编辑不了了? 请管理员修改为1分,谢谢
人工智能的全局和局部优先算法人工智能的全局和局部优先算法人工智能的全局和局部优先算法
资源名:搜索算法_广度优先搜索算法判断图的连通性_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:...
广度优先搜索8数码问题,及其不同方法的对比而来
广度优先搜索
广度优先搜索动画示意图
人工智能实验: 实现结果:给定八数码的起始...最简单的方法是在上述深度搜索代码上进行改动,即可进行广度搜索。 深度是将集合中的元素从末尾取出,即和栈的特点相同,那么将先进后出变为先进先出,即将栈改成了队列。
c语言实现的广度优先搜索算法,BFS,经典的