活动安排问题(贪心版)

来源:互联网 发布:成都和北京旅游 知乎 编辑:程序博客网 时间:2024/05/18 01:55
/** * @author gejing gjblmdlm@sina.com * @version Creation Time:2014-6-24 下午9:14:57  * 活动安排问题,使用贪心算法 */public class Activities {/** * 贪心选择活动,进行标记,并返回确认安排的活动的个数 * @return 活动个数 */public static int greedSelect(int start[], int end[], boolean choose[]) {int i = 0; // 表示当前考虑的活动int j = 0; // 表示已经确认安排的活动的最大序号choose[0] = true; // 表示活动0确认安排int count = 1; // 表示确认安排的活动的个数(初始化为1,因为0号活动确认安排)int num = start.length; // 表示所有活动的个数// 遍历所有的活动,找到相容的活动(相容是指活动时间在数轴上的线段表示不相交)for (i = 1; i < num; i++) {if (start[i] >= end[j]) { // 判断当前活动是否与已经确认安排的活动相容j = i;count++;choose[i] = true;} else {choose[i] = false;}}return count;}public static void main(String[] args) {int[] start = { 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12 };int[] end = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; // 按结束时间非递减排序boolean choose[] = new boolean[11];int count = greedSelect(start, end, choose);System.out.println("最多可以安排" + count + "个活动\n");for (int i = 0; i < 11; i++) {if (choose[i]) {System.out.println("活动" + i + "可以被安排       [" + start[i] + ","+ end[i] + "]");}}}}

0 0