日期:2014-05-20 浏览次数:20896 次
// 结果为:
// 赵 孙 周 钱 李
// 钱 李 赵 孙 周
// 孙 周 钱 李 赵
// 李 赵 孙 周 钱
// 周 钱 李 赵 孙
public static void main(String[] args) {
//0-赵,1-钱,2-孙,3-李,4-周
int[] people = new int[5];
all_permutation(people, 0);
}
private static void all_permutation(int[] people, int level) {
if(level==5) {
boolean zhou_say = getConditionOne(people);
boolean li_say = getConditionTwo(people);
if(!zhou_say && !li_say){
print(people);
}
return;
}else {
for(int i=0; i<5; i++) {
boolean flag = true;
for(int j=0; j<level; j++) {
if(people[j]==i) {
flag = false;
break;
}
}
if(flag == false) {
continue;
}else {
people[level] = i;
all_permutation(people, level+1);
}
}
}
}
//在人群中找到某个人坐的位置
private static int find_people(int[] people, String name) {
String[] names = {"赵", "钱", "孙", "李", "周"};
int i, value;
for(value=0; value<names.length; value++) {
if(names[value].equals(name)) {
break;
}
}
for(i=0; i<people.length; i++) {
if(people[i] == value) {
break;
}
}
return i;
}
//周回忆的条件
private static boolean getConditionOne(int[] people) {
int zhao_pos = find_people(people, "赵");
int qian_pos = find_people(people, "钱");
int sun_pos = find_people(people, "孙");
int li_pos = find_people(people, "李");
boolean flag = zhao_pos + 1 == qian_pos ||
zhao_pos - 1 == qian_pos ||
zhao_pos == 4 && qian_pos == 0 ||
zhao_pos == 0 && qian_pos == 4 ||
qian_pos - 1 == sun_pos ||
qian_pos == 0 && sun_pos == 4 ||
qian_pos - 1 == li_pos ||
qian_pos == 0 && li_pos == 4 ;
return flag;
}
//李回忆说
private static boolean getConditionTwo(int[] people) {
int qian_pos = find_people(people, "钱");
int sun_pos = find_people(people, "孙");
int li_pos = find_people(people, "李");
boolean flag = qian_pos == sun_pos - 1 ||
qian_pos == 4 && sun_pos == 0 ||
li_pos + 1 == sun_pos ||
li_pos - 1 == sun_pos ||
li_pos == 4 && sun_pos == 0 ||
li_pos == 0 && sun_pos == 4;
return flag;
}
//打印找到的结果
private static void print(int[] people) {
String[] names = {"赵", "钱", "孙", "李", "周"};
for(int i:people) {
System.out.print(names[i]+" ");
}
System.out.println();
}
------解决方案--------------------
厉害,佩服得五体投地