贪心--会场安排问题

来源:互联网 发布:剑三曹雪阳捏脸数据 编辑:程序博客网 时间:2024/03/29 14:48
 
package greed;public class Room {public static void sort(int begin[],int end[],int n){for(int i=0;i<n;i++)for(int j=0;j<n-i-1;j++){if(end[j]>=end[j+1]){int tmpbegin,tmpend;tmpbegin = begin[j];begin[j] = begin[j+1];begin[j+1] = tmpbegin;tmpend = end[j];end[j] = end[j+1];end[j+1] = tmpend;}}}public static int[] greedSelect(int begin[],int end[],int n){int flag[] = new int[n];int pre = 1;flag[0] = 1;for(int i=1;i<n;i++)if(begin[i]>=end[pre])flag[i] = 1;return flag;}public static void displayArray(int begin[],int end[],int n){for(int i=0;i<n;i++)System.out.println(begin[i]+"--"+end[i]);}public static void showResult(int begin[],int end[],int a[]){for(int i=0;i<a.length;i++)if(a[i]==1)System.out.println(begin[i]+"--"+end[i]);}public static void main(String args[]){int begin[] = {2,4,1,3,5};int end[] = {4,5,3,6,7};sort(begin,end,5);int result[] = greedSelect(begin,end,5); showResult(begin, end, result);}}/* *  * 会场安排问题: * 这是一个典型的 贪心算法 *  * begin[] 数据表示的是会议的开始时间 * end[] 表示的是结束时间 * 1.首先根据会议的结束时间进行排序,sort 方法是将其排序,而且使它们的开始时间与结束时间在排序过后还是保持一致 * 2.然后根据排序后的顺序,先取出第一个结束的会议,这个会议一会是最先被安排,然后遍历其他时间,找出与前面已经安排的会议的时间相容(就是不冲突=后面会议的开始时间大于等于前面会议的结束时间) * 3.然后再根据这种方法再找出其他会议 *  *  * */