您的位置:首页 > 其它

基于深度优先搜索的全排列实现方法

2016-04-17 10:35 393 查看
<pre name="code" class="java">
//输入一个数n,输出1~n的全排列
//形象化为把4个编号为1~n的小球放进编号1~n的箱子里
public class AllSort {
//假设此时n为4,0不算,若编号为n的小球放进箱子,相应的book[i]置1
static int book[]=new int[5];
//4个箱子里放的小球的编号,箱子编号1-4,0不算
static int a[]=new int[5];
//表示当前操作的箱子数,初始为1
static int count=0;

public static void dfs(int box) {
if (box==5) {
count++;
for (int i = 1; i < a.length; i++) {
if (i==a.length-1) {
System.out.println(a[i]);
}else {
System.out.print(a[i]);
}
}
}
for(int i=1;i<book.length;i++){
if(book[i]==0){
a[box]=i;
book[i]=1;
dfs(box+1);
book[i]=0;
}
}
}

public static void main(String[] args){
int box=1;
dfs(box);
System.out.println("共有"+count+"中排列顺序");
}
}



深度优先搜索,关键是解决”现在该怎么做“,把当前状态下的每一种可能的方法都尝试一遍(用for循环实现);当前步骤解决后,在进入下一步(递归调用自身,但是step+1),下一步的解决方法,也跟当前步骤一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 dfs