排列问题
2016-03-31 23:42
253 查看
算法思想过程:
集合R,r1,r2,r3,...,rn为集合R的元素。
当元素n为1个时,perm(R)=(r),其中r为集合R中唯一的元素;
当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),...,(rn)perm(Rn)组成。
package cn.aaa;
public class perm {
//排序函数
public static void perm(Object list[],int k,int m){ //k为起点,m为终点
//产生list[k: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);
}
}
}
//交换函数,交换list中第k个位置与第m个位置的值
public static void swap(Object list[],int k,int m){
Object temp;
temp = list[k];
list[k] = list[m];
list[m] = temp;
}
public static void main(String[] args) {
Object list[] = {1,2,3,4};
System.out.println("list的所有排列为:");
perm(list,0,list.length-1);
}
}
集合R,r1,r2,r3,...,rn为集合R的元素。
当元素n为1个时,perm(R)=(r),其中r为集合R中唯一的元素;
当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),...,(rn)perm(Rn)组成。
package cn.aaa;
public class perm {
//排序函数
public static void perm(Object list[],int k,int m){ //k为起点,m为终点
//产生list[k: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);
}
}
}
//交换函数,交换list中第k个位置与第m个位置的值
public static void swap(Object list[],int k,int m){
Object temp;
temp = list[k];
list[k] = list[m];
list[m] = temp;
}
public static void main(String[] args) {
Object list[] = {1,2,3,4};
System.out.println("list的所有排列为:");
perm(list,0,list.length-1);
}
}
相关文章推荐
- spring基础
- 对照Java学习Swift--枚举(Enumerations)
- 程序员如何选择技术方向
- 随感
- HTML中cellSpace 和 cellPadding
- [BZOJ3049][Usaco2013 Jan]Island Travels(dfs+spfa+状压dp)
- Leetcode #29 Divide Two Integers 整数相除 解题报告
- 【机器学习详解】概率生成模型与朴素贝叶斯分类器
- gets与scanf
- Codeforces 270E Flawed Flow 网络流问题
- 一步步优化JVM一:概述、方法及需求
- 单词统计、翻译、生成doc
- C++作业-2
- 浮动float和清楚浮动clearfix
- [渗透测试]扫目录,Sqlmap利用均超时,利用dirb扫描
- 周线金叉
- Socket编程-UdpClient的使用
- Lumen/laravel Event Demo
- vs2015连接oracle 11g(.net自带方式 using System.Data.OracleClient;)
- while read line 与 for 区别