博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列——DFS实现
阅读量:6996 次
发布时间:2019-06-27

本文共 1739 字,大约阅读时间需要 5 分钟。

原创


之间就写过一篇全排列的博客:

详细介绍请回看,用的方法(暂且就叫)是“交换法”,其实思路就是DFS(深度优先搜索),此篇博客对上次全排列思想进行一次升华。

例子:

有3个盒子 1、2、3,3张扑克牌 1、2、3,进行扑克牌全排列可以这样实现:

不管面对哪个盒子,都尝试按“1--n”的顺序将扑克牌放入,如果第m张扑克牌已经用过,判断第m+1张是否可用。

当放满n个盒子时,回头,把盒子里面的牌捡回来,再继续按顺序放牌进盒子。

过程:

第1个盒子:放入1号牌

第2个盒子:本来应该放入1号牌,但是由于1号牌已用,只能按顺序放入2号牌

第3个盒子:本来应该放入1号牌,但是1号牌已用,而且判断2号牌也已用,只能放入3号牌

盒子放满,输出

回头,捡回第3个盒子的牌;

第3个盒子:由于手里只有3号牌,放不了了,只能再回头

第2个盒子:捡回2号牌,此时手里剩2、3号牌,对于第2个盒子,按顺序放牌、现在可以将3号牌放入。

第3个盒子:重新按“1--n”的顺序放牌,所以放入2号牌

回头......

其实本人第一篇的全排列博客也是用了DFS,每个位置都按顺序放入数字

(DFS的思想:这一步的选择和下一步的选择相同,进入下一步只需像上层操作即可)

1 import java.util.Scanner; 2  3 public class FullSort { 4      5     static int n; 6     static int total=0; 7     static int box[];    //装入牌 8     static int pai[];    //pai[m]=1代表第m张牌已用,=0代表未用 9     10     public static void full_Sort(int step) {    //step代表第step个盒子11         if(step==n+1) {12             for(int i=1;i<=n;i++) {13                 System.out.print(box[i]+" ");14             }15             System.out.println();16             total++;17             return;18         }19         20         for(int i=1;i<=n;i++) {    //每个盒子都尝试按“顺序”放入1~n张牌21             if(pai[i]==0) {    //第i张牌没用22                 box[step]=i;23                 pai[i]=1;24                 full_Sort(step+1);25                 pai[i]=0;    //回溯26             }27         }28     }29 30     public static void main(String[] args){31         Scanner reader=new Scanner(System.in);32         n=reader.nextInt();    //1~n张扑克牌33         box=new int[n+1];34         pai=new int[n+1];35         for(int i=1;i<=n;i++) {    //每张牌都未用36             pai[i]=0;37         }38         full_Sort(1);39         System.out.println("一共有"+total+"种排列");40     }41 42 }
全排列

13:37:24

2018-07-08

转载于:https://www.cnblogs.com/chiweiming/p/9279858.html

你可能感兴趣的文章
在Ubuntu上安装Thrift并调通一个例子
查看>>
ZOJ 3671 Japanese Mahjong III(模拟)
查看>>
SSL/TLS 应用于无Svc文件的WCF
查看>>
Ioc系列之Ninject之简单实用
查看>>
libv4l 库
查看>>
【原】unity调Android(一)
查看>>
UNIX域流式套接字一例
查看>>
甲骨文Oracle公司或将收购惠普HP传闻
查看>>
[转]IBM GDC,你不会有创新!
查看>>
unicore32-linux-gcc 预定义宏
查看>>
MySQL基础与操作
查看>>
jsdoc_toolkit
查看>>
【spring】spring的一些思想,哪些bean需要注入
查看>>
javascript实现的gzip压缩(deflate)和解压缩(inflate)算法 - sudone.com服务器系统架构分析日志...
查看>>
alertify.js提醒效果JS库
查看>>
网页中的上标和下标实现
查看>>
不同手指戴戒指时的"清热解毒"的"清"是什么意思?_百度知道
查看>>
查询条件TPH inheritance 查询的 3 种写法
查看>>
IPTABLE 端口范围指定
查看>>
Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
查看>>