解题步骤
1、将待安排的n个活动按结束时间的非减序排列
2、用集合A存储所选择的活动,先将排序好的第一个活动加入集合A。
3、若被检查的活动i的开始时间Si小于最近选择的活动j的结束时间fi(fi总是当前集合A中所有活动的最大结束时间)则不选择活动i,否则选择活动i加入集合A中。
4、重复执行步骤3,直到所有的活动都被检查完。
package com.hhmstu.Algorithmdesignandanalysis.Greedyalgorithm; public class Eventarrangement { public static void main(String[] args) { int[] s = {1,3,0,5,3,5,6,8,8,2,12}; int[] f = {4,5,6,7,8,9,10,11,12,13,14};//这里需要按每个活动的结束时间将二表按升序排列 boolean[] m = new boolean[11]; EA(s,f,m); for (int i = 0; i < m.length; i++) { System.out.print((i+1)+"\t"+m[i]+"\t"); } } public static void EA(int[] s, int[] f, boolean[] m) { //安排表取第一个 m[0] = true; int j = 0; //双层循环遍历俩表 for (int i = 1; i < s.length; i++) { if(s[i]>=f[j]){ m[i] = true; j = i; }else { m[i] = false; } } } }