zoukankan      html  css  js  c++  java
  • 深度搜索优先(全排列)//本内容来自《啊哈!算法》或者英文名《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
            
        }
        }

     只有输入没有输出是怎么回事,请求大家的解答

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    第九周学习进度总结
    SLR(1)语法分析(JAVA实现)
    算符优先分析
    第八周学习进度总结
    Android 自学之相对布局 RelativeLayout
    Android 自学之表格布局 TableLayout
    Android 自学之线性布局 LinearLayout
    Android 自学之帧布局 FrameLayout
    机器学习进度05(FaceBook案例)
    机器学习进度04(转换器、预估器、K-近邻算法、模式选择与调优)
  • 原文地址:https://www.cnblogs.com/majiasheng/p/9315600.html
Copyright © 2011-2022 走看看