62,634
社区成员




/**
* <B>name</B> 全排列测试实例
*
* @author 艳沐石
*
* @description 实现第二位不为2,3跟4不相邻的全排列
*/
public class QuanPaiLieDemo extends PaiLei {
/*
* (non-Javadoc)
* @see javase.algorithm.PaiLei#dataFilter(int[])
*/
@Override
public boolean dataFilter(int[] list) {
int index = -1;
int n = list.length;
if (n > 2 && list[1] == 2) {
return false;
}
for (int i = 0; i < n; i++) {
if (list[i] == 3) {
index = i;
break;
}
}
return index == -1 ? true :
!((index < n - 1 && list[index + 1] == 4) ||
(index > 0 && list[index - 1] == 4));
}
}
abstract class PaiLei {
private int count;
public int count() {
return count;
}
/**
* 排列算法
*
* @param list
* 排序数据
* @param k
* 移动点
* @param m
* 数据个数
*/
public void paiLie(int list[], int k, int m) {
if (k == m) {
if (dataFilter(list)) {
count++;
System.out.println(Arrays.toString(list));
}
} else {
for (int i = k; i < m; i++) {
swap(list, k, i);
paiLie(list, k + 1, m);
swap(list, k, i);
}
}
}
/**
* 限制规则方法
*
* @param list
* 排列数组
* @return 是否通过
*/
public abstract boolean dataFilter(int[] list);
private void swap(int[] datas, int i, int j) {
int t = datas[i];
datas[i] = datas[j];
datas[j] = t;
}
}
public class Test {
int []data;
int num;
public Test(int []data,int num){
this.data = data;
this.getNum("",num);
}
public void getNum(String pre,int time){
if(time==1)
{
for(int i=0;i<data.length;i++){
System.out.println(pre+data[i]);;
}
}else{
int xx=time-1;
for(int i=0;i<data.length;i++){
getNum(pre+data[i],xx);
}
time--;
}
}
/**
* @param args
*/
public static void main(String[] args) {
int aa[]=new int[]{1,2,3,4,5};
new Test(aa,3);
}
}