`
iaiai
  • 浏览: 2216436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 深度优先搜索(回溯法)

 
阅读更多
深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-First Search)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。

package org.iaiai.suanfa;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * <p>
 * Title: BackTrack.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-8-5
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class BackTrack {

	public static void main(String[] args) {
		// 初始化一个集合,放在list里面
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("f");
		List<String> li = new ArrayList<String>();
		PowerSet(0, list, li);
	}

	// 回溯法求幂集
	public static void PowerSet(int i, List<String> list, List<String> li) {

		if (i > list.size() - 1) {
			System.out.println(li);
		} else {
			li.add(list.get(i));// 左加
			PowerSet(i + 1, list, li); // 递归方法
			li.remove(list.get(i)); // 右去
			PowerSet(i + 1, list, li);
		}
	}

}


输出:
引用

[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 2]
[1, 3, 4]
[1, 3]
[1, 4]
[1]
[2, 3, 4]
[2, 3]
[2, 4]
[2]
[3, 4]
[3]
[4]
[]
分享到:
评论

相关推荐

    Java深度优先遍历算法随机生成迷宫

    Java深度优先遍历算法在计算机科学中是一种常用的搜索策略,特别是在解决迷宫生成问题时。这个资源使用Eclipse IDE开发,旨在通过深度优先遍历(DFS, Depth-First Search)来随机生成迷宫。DFS是一种递归的遍历方法...

    0-1背包问题(回溯法)

    然而,由于回溯法的本质是深度优先搜索,没有进行有效的剪枝策略时,其效率通常较低,不适合处理大规模数据。 在提供的Java实验报告中,0-1背包问题的实现可能会包含以下关键步骤: 1. **定义状态**:通常用二维...

    回溯法解决N皇后问题 Java代码实现

    回溯法解决N皇后问题是一种基于深度优先搜索的策略,用于找到所有可能的解决方案,而不仅仅是第一个找到的解。在N皇后问题中,目标是在一个n×n的棋盘上放置n个皇后,使得任意两个皇后都不会在同一行、同一列或同一...

    CSP.rar_csp_java csp_回溯法

    回溯法通过深度优先搜索的方式,尝试试探性地为每个变量分配值,如果在某一步发现当前的赋值无法满足约束,它会撤销最近的决策,返回上一层继续尝试其他可能性,直到找到解决方案或确定无解。这种“试错”和“撤销”...

    回溯法实验报告(Java).doc

    回溯法是一种基于深度优先搜索的算法,常用于解决复杂问题的求解,如图着色、数独填充、旅行商问题等。在本实验中,回溯法被应用于求解0-1背包问题,这是一个典型的组合优化问题,目标是在不超过背包总重量的情况下...

    回溯法:从入门到精通

    2. **搜索顺序**:在解空间中,回溯法通常采用深度优先搜索(DFS)策略,即先探索一条路径,直到无法继续才回溯到上一层。DFS保证了回溯法能遍历所有可能的解。 3. **剪枝函数**:为了避免不必要的计算,我们会设置...

    图的着色问题-回溯法-子集树

    在这个问题中,回溯法结合子集树的概念,构建了一个搜索空间,通过深度优先的方式逐层探索,直到找到所有可行的解决方案。 总结来说,这个Java程序利用回溯法和子集树策略解决了图的着色问题,对于给定的无向图,它...

    蓝桥杯深度优先搜索

    深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树或图的算法,它的基本思想是尽可能深地探索图的分支。在遇到死胡同时,算法会回溯到上一步,尝试其他可能的路径。DFS在解决许多算法问题中发挥着重要...

    航线选择_航线深度优先_航线选择_深度遍历算法_

    源代码部分可能使用了某种编程语言(如Python、C++或Java)实现深度优先搜索算法,对给定的航线网络进行遍历。 深度优先搜索有多种变体,例如: - 非递归实现,使用栈来保存待访问的节点。 - 记录回溯路径,以找出...

    回溯法工作分配

    3. **定义搜索策略**:通常是深度优先搜索,即先尝试一个完整的分配路径,再回溯到上一层。 4. **定义剪枝函数**:在搜索过程中,如果发现当前分支不可能产生最优解,就立即停止该分支的搜索,避免无效计算。 5. *...

    有界深度优先算法八数码问题.rar_java 八数码 深度_八数码_八数码 Java_八数码深度_深度优先算法

    有界深度优先搜索(Bounded Depth-First Search, BDFS)是一种在图或树结构中寻找路径或解的算法,通常用于解决...通过理解和学习这一算法,我们可以深入理解状态空间搜索、回溯法以及如何在实际问题中应用这些概念。

    回溯法解数独游戏

    在数独问题中,我们可以采用深度优先搜索(DFS)的方式,从空的数独盘面开始,依次填充每个单元格,每次选择一个未填充的单元格并尝试填入合适的数字,如果填入的数字符合数独规则,就继续填充下一个单元格;...

    Java回溯法求分割回文字符串源码

    这种方法通常与深度优先搜索(DFS)相结合。 在Java中,分割回文字符串问题要求我们将一个给定的字符串分割成多个子串,这些子串都必须是回文串。回文串是指正读反读都能读通的字符串,例如"madam"、"level"和...

    深度优先算法和十字链表

    在提供的"深度优先算法和十字链表程序实现"文件中,我们可以预期找到一个使用C++或Java等编程语言编写的程序,该程序将实现深度优先搜索算法,并利用十字链表数据结构来存储和操作图。代码可能包括定义顶点类、边类...

    学习常用算法之(3)回溯法

    在算法书中的正式定义,回溯法是在解空间树(或森林)中按照深度优先搜索策略,从根节点出发,如果当前节点满足问题的约束条件,则继续深入搜索;若不满足,则回溯至上一节点,尝试其他分支。 回溯法通常包括以下三...

    回溯法解决八皇后问题

    - **深度优先搜索**:回溯法是深度优先搜索的一种特殊情况,它沿着一条路径深入搜索,直到达到解或无法继续为止,然后回溯到前一个状态。 - **状态空间树**:八皇后问题可以抽象为一个状态空间树,每个节点代表棋盘...

    回溯法入门学习之一

    回溯法是一种强大的算法...在这个“回溯法入门学习之一”的主题中,我们了解了回溯法的基本步骤,并通过一个Java程序进行了简单实现。通过持续学习和实践,我们可以熟练掌握这种算法,并将其应用于更复杂的实际问题中。

    回溯算法java实例

    回溯算法在这里的应用主要是通过深度优先搜索(DFS)的方式,每次尝试从当前位置向四个方向(上、下、左、右)移动,如果移动后的位置合法(即在迷宫范围内且非墙壁),则继续向下搜索;若到达目标位置,则找到一条...

    广度优先+深度优先求解八皇后问题.zip

    本压缩包包含了两种不同的解决方法:广度优先搜索(BFS)和深度优先搜索(DFS),均使用Java编程语言实现。 首先,我们来详细解释广度优先搜索(BFS)。BFS 是一种用于遍历或搜索树或图的算法,它按照“先到先服务...

    算法回溯法实验,算法实验

    回溯法是一种基于试探性的深度优先搜索算法,用于解决那些具有约束条件的问题,它尝试逐步构建解决方案,并在发现无法满足约束时撤销最后的步骤,退回一步寻找其他可能的分支。在给定的实验中,回溯法被应用于解决三...

Global site tag (gtag.js) - Google Analytics