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

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

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/majiasheng/p/9315600.html
Copyright © 2011-2022 走看看