深度优先搜索(Depth First Search)
public class Test { public static void main(String[] args) { Test t = new Test(); t.depthFirstSeacrh(0); } int n = 5; int[] a = new int[n]; int[] book = new int[n]; public void depthFirstSeacrh(int step) { int i = 0; if (step == n) { out(a); return; } for (i = 0; i < n; i++) { if (book[i] == 0) { a[step] = i+1; book[i] = 1; depthFirstSeacrh(step + 1); book[i] = 0; } } } public void out(int[] a) { for (int i : a) { System.out.print(i + " "); } System.out.println(); }}
代码解析
* 模型 全排列1,2,3 * 设置盒子 a数组 1,2,3 * 手上持有数据 1,2,3 3张卡片 * 设置标记状态 book[i] 第i张卡片是否被放置在盒子中 * 如 book[1]=1 表示 1号卡片,已经放置在盒子中了 * step 表示,执行步骤.每一次排列,step 最大为3 * 经过多轮排列,在第1步操作中,向1号盒子放置3号卡片 * a[step] = i; 如 a[2] = 1, * 表示 在某次排列中,在第2步操作,向2号盒子放置1号卡片