深度搜索优先(全排列)//本内容来自《啊哈!算法》或者英文名《Aha!Algorithms》)
package Mypackage;
import java.util.Scanner;
public class 全排列{
static int a[]=new int[10];
static int book[]=new int[10];
static int n=0;
static void dfs(int step)//step表示出现在第几个盒子里面前
{
int i;
if(step==n+1)//如果站在第n+1个盒子面前,则表示前n个盒子已经放好扑克牌、
{
for(i=1;i<n;i++)
System.out.println(""+a[i]);
System.out.println();//System.out.print();
return;//返回之前的一步(最近一次调用dfs方法的地方)
}
//此时葬在第step个盒子面前,应该放哪张牌呢?
//按照1、2、3……n的顺序一一尝试
for(i=1;i<n;i++) {
//判断扑克牌i是否在手上
if(book[i]==0)//book[i]=0表示i号扑克牌在手上
{//开始尝试使用扑克牌i是否在手上
a[step]=i;//将i号扑克牌放入到第step个盒子中
book[i]=1;//将book[i]设为1,表示i号扑克牌已经不再手上
//第step个盒子已经放好扑克牌,接下来需要走到下一个盒子面前
dfs(step+1);//这里通过函数的递归调用来实现(自己调用自己)
book[i]=0;//这是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试
}
}//先执行什么?//二分搜索也是类似的答案,一步执行一步
return;
}
public static void main(String args[]) {
Scanner ms=new Scanner(System.in);
/* System.out.println("输入一个整数:");*/
int n=ms.nextInt();
dfs(1);
getchar();getchar();
}
private static void getchar() {
// TODO Auto-generated method stub
}
}
题目:输入一个数n:输出1~n的全排列,从·c语言到Java过渡。
1 package Mypackage; 2 import java.util.Scanner; 3 public class 全排列{ 4 static int a[]=new int[10]; 5 static int book[]=new int[10]; 6 static int n=0; 7 static void dfs(int step)//step表示出现在第几个盒子里面前 8 { 9 int i; 10 if(step==n+1)//如果站在第n+1个盒子面前,则表示前n个盒子已经放好扑克牌、 11 { 12 for(i=1;i<n;i++) 13 System.out.println(""+a[i]); 14 System.out.println();//System.out.print(); 15 return;//返回之前的一步(最近一次调用dfs方法的地方) 16 } 17 //此时葬在第step个盒子面前,应该放哪张牌呢? 18 //按照1、2、3……n的顺序一一尝试 19 for(i=1;i<n;i++) { 20 //判断扑克牌i是否在手上 21 if(book[i]==0)//book[i]=0表示i号扑克牌在手上 22 {//开始尝试使用扑克牌i是否在手上 23 a[step]=i;//将i号扑克牌放入到第step个盒子中 24 book[i]=1;//将book[i]设为1,表示i号扑克牌已经不再手上 25 //第step个盒子已经放好扑克牌,接下来需要走到下一个盒子面前 26 dfs(step+1);//这里通过函数的递归调用来实现(自己调用自己) 27 book[i]=0;//这是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试 28 } 29 }//先执行什么?//二分搜索也是类似的答案,一步执行一步 30 return; 31 } 32 public static void main(String args[]) { 33 Scanner ms=new Scanner(System.in); 34 /* System.out.println("输入一个整数:");*/ 35 int n=ms.nextInt(); 36 dfs(1); 37 getchar();getchar(); 38 39 40 } 41 private static void getchar() { 42 // TODO Auto-generated method stub 43 44 } 45 }
package Mypackage;
import java.util.Scanner;
public class 全排列{
static int a[]=new int[10];
static int book[]=new int[10];
static int n=0;
static void dfs(int step)//step表示出现在第几个盒子里面前
{
int i;
if(step==n+1)//如果站在第n+1个盒子面前,则表示前n个盒子已经放好扑克牌、
{
for(i=1;i<n;i++)
System.out.println(""+a[i]);
System.out.println();//System.out.print();
return;//返回之前的一步(最近一次调用dfs方法的地方)
}
//此时葬在第step个盒子面前,应该放哪张牌呢?
//按照1、2、3……n的顺序一一尝试
for(i=1;i<n;i++) {
//判断扑克牌i是否在手上
if(book[i]==0)//book[i]=0表示i号扑克牌在手上
{//开始尝试使用扑克牌i是否在手上
a[step]=i;//将i号扑克牌放入到第step个盒子中
book[i]=1;//将book[i]设为1,表示i号扑克牌已经不再手上
//第step个盒子已经放好扑克牌,接下来需要走到下一个盒子面前
dfs(step+1);//这里通过函数的递归调用来实现(自己调用自己)
book[i]=0;//这是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试
}
}//先执行什么?//二分搜索也是类似的答案,一步执行一步
return;
}
public static void main(String args[]) {
Scanner ms=new Scanner(System.in);
/* System.out.println("输入一个整数:");*/
int n=ms.nextInt();
dfs(1);
getchar();getchar();
}
private static void getchar() {
// TODO Auto-generated method stub
}
}
只有输入没有输出是怎么回事,请求大家的解答