import java.util.ArrayList;
import java.util.List;
/**
* 排列
*/
public class Floor {
/**
* 对字符串数组进行全排列
*
* @param args 字符串数组
* @return 所有排列情况的字符串数组列表
*/
public List<String[]> doPermutation(String[] args) {
//保存结果的列表
List<String[]> rl = new ArrayList<String[]>();
//添加初始数组
rl.add(args);
//外层遍历
for (int i = 0; i < args.length; i++) {
List<String[]> l = new ArrayList<String[]>();
//内层遍历
for (int j = 0; j < i; j++) {
//换位后的数组列表的所有元素追加到此列表的尾部。
l.addAll(convertArray(rl, i, j));
}
rl.addAll(l);
}
return rl;
}
/**
* 把列表中所有数组中b位置的字符串换到a位置
*
* @param l 列表
* @param a 位置
* @param b 位置
* @return 换位后的数组列表
*/
public List<String[]> convertArray(List<String[]> l, int a, int b) {
//保存结果的列表
List<String[]> rl = new ArrayList<String[]>();
//遍历列表
for (int i = 0; i < l.size(); i++) {
//克隆列表中的数组
String[] ss = (String[])l.get(i).clone();
//数组换位
String s = ss[a];
ss[a] = ss[b];
ss[b] = s;
//保存换位后的数组
rl.add(ss);
}
return rl;
}
/**
* 得到某个人所在楼层.
*
* @param floor 楼层列表
* @param name
* @return 楼层
*/
public int getIndexOfName(String[] floor, String name) {
int f = 0;
for (int i = 0; i < floor.length; i++) {
if (floor[i].equals(name)) {
f = i + 1;
}
}
return f;
}
public void calculateAndPrint(List<String[]> list, String[] names) {
for (int i = 0; i < list.size(); i++) {
String[] res = list.get(i);
//得到各人的楼层
int a = this.getIndexOfName(res, names[0]);
int b = this.getIndexOfName(res, names[1]);
int c = this.getIndexOfName(res, names[2]);
int d = this.getIndexOfName(res, names[3]);
int e = this.getIndexOfName(res, names[4]);
//其中A不住1楼,B不住5楼
if (a != 1 && b != 5) {
//C和D住上下楼(可以C比D住的高,也可以D比C住的高),
if ((c - d) == 1 || (c - d) == -1) {
//E比C住的高
if (e > c) {
this.print(res);
}
}
}
}
}
/**
* 打印数组
*
* @param bb
*/
public void print(String[] bb) {
//遍历数组元素
for (int k = 0; k < bb.length; k++) {
//打印数组元素
System.out.print(bb[k]);
}
//换行
System.out.print("\n");
}
public static void main(String[] args) {
Floor floor = new Floor();
String[] names = {"A", "B", "C", "D", "E"};
List<String[]> list = floor.doPermutation(names);
floor.calculateAndPrint(list, names);
}
}
希望有人能帮帮我,谢谢拉!