您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页全排列--3/16

全排列--3/16

来源:五一七教育网
public class top3 {
    //深度优先搜索递归解决全排列的问题
    //深度优先的一般思路,但是为什么???
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        //究竟有多少个数字需要全排列(还有就是定义成为全局变量和传递参数来说究竟有什么不一样是不是)
        int n=sc.nextInt();
        int st[]=new int[n];
        int num[]=new int[n];
        //如果t传递1进去,表示从第1位开始,那么这个时候有
        //但是t要作为num的数组的下标,所以只能从0开始
        dfs(0,n,st,num);
    }


    //t表示目前我正在排列的是哪一位的位数
    static void dfs(int t,int n,int st[],int num[]) {
        //终止条件
        if(t==n) {
            //我已经排列到最后一位了,这个时候就是结束
            for(int i=0;i<n;i++)
            {
                System.out.print(num[i]+" ");
            }
            System.out.println();
            return;
        }
        //开辟的数组空间是0-n
        //全排列的数组是1-n
        //实际上的索引是0--(n-1)
        for(int i=1;i<=n;i++)
        {
            if(st[i-1]==0)
            {
                num[t]=i;
                st[i-1]=1;
                dfs(t+1,n,st,num);
                st[i-1]=0;
                num[t]=0;
            }

    }


}


}

还看见一种直接使用交换进行全排列,感觉思路上比这个简单,但是这种应该适合绝大多数的深度优先搜索

利用深度优先搜索

一般模版

static void dfs(参数)  参数一般包含我需要判断的条件,标记数组,记录结果的数组,数组大小

{

if(结束条件)

达到目的之后需要做什么

return;

//循环遍历

for(int i=0;i<n;i++)

{

if(当前元素没有被访问过)

操作

递归

回溯
}

}
 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务