Java基于递归解决全排列问题算法示例

所属分类: 软件编程 / java 阅读数: 22
收藏 0 赞 0 分享

本文实例讲述了Java基于递归解决全排列问题算法。分享给大家供大家参考,具体如下:

排列问题

R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳如下:

当n=1时,Perm(R)=(r),其中r是集合中唯一的元素;

当n>1时,Perm(R)(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3)。。。。(rn)Perm(Rn)构成。

public class AllSort {
  public static void perm(int[] list, int k, int m) {
    if( k == m) {
      for (int i = 0; i <=m; i++) {
        System.out.print(list[i]);
      }
      System.out.println();
    }
    else{
      for(int i = k; i <= m; i++) {
        swap(list,k,i);
        perm(list, k+1 , m);
        swap(list,k,i);
      }
    }
  }
  public static void swap(int[] list, int a, int b) {
    int temp;
    temp = list[a];
    list[a] = list[b];
    list[b] = temp;
  }
  public static void main(String args[]) {
    int[] list = new int[5];
    for(int i = 0; i < list.length; i++) {
      list[i] = i+1;
    }
    perm(list,0,list.length-1);
  }
}

运行结果:

12345
12354
12435
12453
12543
12534
13245
13254
13425
13452
13542
13524
14325
14352
14235
14253
14523
14532
15342
15324
15432
15423
15243
15234
21345
21354
21435
21453
21543
21534
23145
23154
23415
23451
23541
23514
24315
24351
24135
24153
24513
24531
25341
25314
25431
25413
25143
25134
32145
32154
32415
32451
32541
32514
31245
31254
31425
31452
31542
31524
34125
34152
34215
34251
34521
34512
35142
35124
35412
35421
35241
35214
42315
42351
42135
42153
42513
42531
43215
43251
43125
43152
43512
43521
41325
41352
41235
41253
41523
41532
45312
45321
45132
45123
45213
45231
52341
52314
52431
52413
52143
52134
53241
53214
53421
53412
53142
53124
54321
54312
54231
54213
54123
54132
51342
51324
51432
51423
51243
51234

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

Java基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多