深度搜索優先(全排列)
阿新 • • 發佈:2018-07-16
public tint 判斷 auto pack get private 輸入一個數 ring
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的全排列
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(); }
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
}
}
只有輸入沒有輸出是怎麽回事,請求大家的解答
深度搜索優先(全排列)