1. 程式人生 > >深度搜索優先(全排列)

深度搜索優先(全排列)

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
        
    }
    }

只有輸入沒有輸出是怎麽回事,請求大家的解答

深度搜索優先(全排列)