package org.com.lin.test;
import java.util.*;
/**
*
* 深度优先搜索算法测试
* 解决最大路径问题
* @author linfenliang
* @version 1.00 2011/12/23
*/
public class DFS_test {
/**
* 存放深度优先搜索的结果集
*/
private static List<List<String>> listCollection;
/**
*
* 概述:深度优先搜索(回溯法求幂集)
* @Title: DFS_set
* @param i 初始设为0
* @param list 需要遍历的集合
* @param tempList 临时实例化的集合
* void
* @user <a href=mailto:linfenliang@126.com>linfenliang</a>
*/
public static void DFS_set(int i, List<String> list, List<String> tempList) {
if (listCollection == null) {
listCollection = new ArrayList<List<String>>();
}
if (i > list.size() - 1) {
listCollection.add(new ArrayList<String>(tempList));
} else {
tempList.add(list.get(i)); //左翼结果集填入临时集合
DFS_set(i + 1, list, tempList); // 递归深入搜索
tempList.remove(list.get(i)); //递归返回出来后去掉新增的结果
DFS_set(i + 1, list, tempList); //继续递归深入同层次目录
}
}
/**
* @param args
*
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
DFS_set(0, list, new ArrayList<String>());
System.out.println("结果集的大小(子集个数):2^"+list.size()+"===>"+listCollection.size());
for (List<String> lt: listCollection) {
// Collections.sort(lt);
// Collections.reverse(lt);
for (String str : lt) {
System.out.print(str + " ");
}
System.out.println();
}
}
}