您的位置:首页 > 其它

算法实现-->全排列问题

2015-03-15 10:56 323 查看
import java.util.ArrayList;
import java.util.List;

/*
* 全排列算法
* 2013-13-29
* By YananLee
* 算法思想:利用递归思想对数组进行操作
*/
public class FullPerm {

/*
*lst 要进行全排列的数组
*r   表示数组中第r之前的已经排好序,初始时为0,即所有位置都未确定
*length 表示lst中未排好序的长度
*算法思想:如果length=1 则已排好一次,输出数组
*       否则就确定从第0位置开始确定数据
*
*/
static void perm(ArrayList<String> lst,int r,int length)
{
if (length==1)
{
for (int i=0;i<lst.size();i++)
{
System.out.print(""+lst.get(i));
}
System.out.println("");
}
else {
for(int i=r;i<lst.size();i++)
{
// ArrayList<String>lstTmp=lst;
// lstTmp.remove(i);
/*
String tmp=lst.get(r);
lst.set(i, tmp);
lst.set(r,lst.get(i));
*/
swap(lst,r,i);//每次交换两个
perm(lst,r+1,length-1);//递归的调用
swap(lst,r,i);//还原数组 ,主要针对上上一步中的交换

// perm(lstTmp,i,length-1);
//System.out.println("  ");
}
}

}
static void swap(ArrayList<String> lst,int i,int j)
{
//交换函数
String tmp=lst.get(j);
lst.set(j,lst.get(i));
lst.set(i, tmp);

}
public static void printArr(ArrayList lst)
{    //对数组的输出函数
System.out.println("输出数组:" );
for(int i=0;i<lst.size();i++)
{
System.out.print(""+lst.get(i));
}

}
public static void main(String args[])
{
ArrayList<String>  lst =new ArrayList();
lst.add("a");lst.add("b");lst.add("c");lst.add("d");
//printArr(lst);
perm(lst,0,5);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: