天天看點

算法實踐-最大數量活動選擇-貪心算法

package com.greedy;

public class ActivitySelect {
  private int[][]activity;
  private int[][]select;
  private int index;
  public ActivitySelect(int[][]activity){
    this.activity=activity;
    select=new int[activity.length][2];
    
  }
  public void activitySelector(){
    inneractivitySelector(0);
    printActivity();
  }
  private void inneractivitySelector(int start){
    int m=start+1;
    if(m==activity.length){
      select[index][0]=activity[start][0];
      select[index][1]=activity[start][1];
    }else{
      while(m<activity.length&&activity[m][0]<activity[start][1]){
        m=m+1;
      }
      if(m<activity.length){
        select[index][0]=activity[start][0];
        select[index][1]=activity[start][1];
        index=index+1;
        inneractivitySelector(m);
      }
    }
    
  }
  public void printActivity(){
    for(int i=0;i<select.length;i++){
      if(select[i][0]==0){
        break;
      }
      System.out.print("("+select[i][0]+","+select[i][1]+") ");
    }
    System.out.println();
  }
  public static void main(String[] args) {
    int[][]activity=new int[][]{
        {1,4},
        {3,5},
        {0,6},
        {5,7},
        {3,9},
        {5,9},
        {6,10},
        {8,11},
        {8,12},
        {2,14},
        {12,16}
    };
    ActivitySelect select=new ActivitySelect(activity);
    select.activitySelector();

  }

}      

繼續閱讀