组合问题

航班组合问题:

1 package com.shanghai.test;
2
3  import java.util.ArrayList;
4  import java.util.Arrays;
5  import java.util.List;
6
7  public class TestComb {
8 public static void main(String[] args) {
9 //初始化
10   AirLine[] aLines = {new AirLine(1, "Line-01"),new AirLine(2, "Line-02"),new AirLine(3, "Line-03")};
11 AirLine[] bLines = {new AirLine(4, "Line-04"),new AirLine(5, "Line-05")};
12 AirLine[] cLines = {new AirLine(6, "Line-06"),new AirLine(7, "Line-07")};
13 List<AirLine[]> airLinesList = new ArrayList<AirLine[]>();
14 airLinesList.add(aLines);
15 airLinesList.add(bLines);
16 airLinesList.add(cLines);
17
18 //测试时间
19   System.out.println(System.currentTimeMillis());
20 List<AirLine[]> result = getCombLines(airLinesList);
21 System.out.println(System.currentTimeMillis());
22
23 //打印结果
24   for (int i = 0; i < result.size(); i++) {
25 AirLine[] airLines = result.get(i);
26 for (AirLine airLine : airLines) {
27 System.out.print(airLine.getName() + "\t");
28 }
29 System.out.print("\n");
30 }
31 }
32
33 public static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList){
34 return getCombLines(airLinesList, 0, null);
35 }
36 private static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList,int index ,AirLine[] combLinesArr){
37 if (index >= airLinesList.size() || index < 0) {
38 throw new IllegalArgumentException("Invalid Argument For index:" + index);
39 }
40 if (combLinesArr == null)
41 combLinesArr = new AirLine[]{};
42
43 List<AirLine[]> result = new ArrayList<AirLine[]>();
44 int combLength = combLinesArr.length;
45
46 for (AirLine line : airLinesList.get(index)) {
47  // AirLine[] newCombLinesArr = Arrays.copyOf(combLinesArr, combLength + 1);//JDK1.6
48   AirLine[] newCombLinesArr = new AirLine[combLength + 1];
49 System.arraycopy(combLinesArr, 0, newCombLinesArr, 0, combLength);
50 newCombLinesArr[combLength] = line;
51
52 if (index < airLinesList.size() - 1)
53 result.addAll(getCombLines(airLinesList,index+1,newCombLinesArr));
54 else
55 result.add(newCombLinesArr);
56 }
57 return result;
58 }
59 }

AirLine类:

1 public class AirLine {
2 private int id;
3 private String name;
4 public AirLine(int id, String name) {
5 super();
6 this.id = id;
7 this.name = name;
8 }
9 public int getId() {
10 return id;
11 }
12 public void setId(int id) {
13 this.id = id;
14 }
15 public String getName() {
16 return name;
17 }
18 public void setName(String name) {
19 this.name = name;
20 }
21 }

打印结果:

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

posted on 2011-03-28 22:42  ZolRa  阅读(233)  评论(0编辑  收藏  举报

导航