您的位置:首页 > 其它

组合问题

2011-03-28 22:42 253 查看
航班组合问题:

package com.shanghai.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestComb {
public static void main(String[] args) {
//初始化
AirLine[] aLines = {new AirLine(1, "Line-01"),new AirLine(2, "Line-02"),new AirLine(3, "Line-03")};
AirLine[] bLines = {new AirLine(4, "Line-04"),new AirLine(5, "Line-05")};
AirLine[] cLines = {new AirLine(6, "Line-06"),new AirLine(7, "Line-07")};
List<AirLine[]> airLinesList = new ArrayList<AirLine[]>();
airLinesList.add(aLines);
airLinesList.add(bLines);
airLinesList.add(cLines);

//测试时间
System.out.println(System.currentTimeMillis());
List<AirLine[]> result = getCombLines(airLinesList);
System.out.println(System.currentTimeMillis());

//打印结果
for (int i = 0; i < result.size(); i++) {
AirLine[] airLines = result.get(i);
for (AirLine airLine : airLines) {
System.out.print(airLine.getName() + "\t");
}
System.out.print("\n");
}
}

public static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList){
return getCombLines(airLinesList, 0, null);
}
private static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList,int index ,AirLine[] combLinesArr){
if (index >= airLinesList.size() || index < 0) {
throw new IllegalArgumentException("Invalid Argument For index:" + index);
}
if (combLinesArr == null)
combLinesArr = new AirLine[]{};

List<AirLine[]> result = new ArrayList<AirLine[]>();
int combLength = combLinesArr.length;

for (AirLine line : airLinesList.get(index)) {
//         AirLine[] newCombLinesArr = Arrays.copyOf(combLinesArr, combLength + 1);//JDK1.6
AirLine[] newCombLinesArr = new AirLine[combLength + 1];
System.arraycopy(combLinesArr, 0, newCombLinesArr, 0, combLength);
newCombLinesArr[combLength] = line;

if (index < airLinesList.size() - 1)
result.addAll(getCombLines(airLinesList,index+1,newCombLinesArr));
else
result.add(newCombLinesArr);
}
return result;
}
}


AirLine类:

public class AirLine {
private int id;
private String name;
public AirLine(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


打印结果:

1301323243958
1301323243958
Line-01    Line-04    Line-06
Line-01    Line-04    Line-07
Line-01    Line-05    Line-06
Line-01    Line-05    Line-07
Line-02    Line-04    Line-06
Line-02    Line-04    Line-07
Line-02    Line-05    Line-06
Line-02    Line-05    Line-07
Line-03    Line-04    Line-06
Line-03    Line-04    Line-07
Line-03    Line-05    Line-06
Line-03    Line-05    Line-07
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: