import java.util.ArrayList;
import java.util.List;
public class ActiveSelector {
private int[] s= {0,1,3,0,5,3,5,6,8,8,2,12}; //a0 a1..a11活動開始時間數組
private int[] f = {0,4,5,6,7,9,9,10,11,12,14,16}; //a0 a1..a11活動結束時間數組
List<Activity> ls = new ArrayList<Activity>(); //用來存放最優選擇的容器
public static void main(String[] args) {
new ActiveSelector().start();
}
void start() {
recursiveActivitySelector(s,f,0,11);
print();
}
private void print() {
System.out.println("最優選擇方案:");
for(Activity i:ls) {
System.out.print("a"+i.index+":"); //打印最優的選擇方案
System.out.println(i.startTime+"-"+i.endTime);
}
}
private void recursiveActivitySelector(int[] s,int[] f,int k,int n) {
int m = k + 1;
while(m<=n && s[m]<f[k]) {
m = m + 1;
}
if(m <= n) {
ls.add(new Activity(s[m],f[m],m)); //將最優的選擇加入到容器中
recursiveActivitySelector(s,f,m,n);
}
}
private class Activity {
private int startTime = 0; //活動的開始時間
private int endTime = 0; //活動的結束時間
private int index = 0;
//構造函數
public Activity(int starttime, int endtime,int index) {
this.startTime = starttime;
this.endTime = endtime;
this.index = index;
}
}
}
運行結果和算法導論上一致:
最優選擇方案:
a1:1-4
a4:5-7
a8:8-11
a11:12-16