一、實驗內容及要求
1.要求按貪心算法原理求解問題;
2.要求手工輸入s[10]及f[10],其中注意自己判斷s[i]<f[i];
3.要求顯示所有活動及最優活動安排的i事件列表。
二、實驗步驟
1、手工輸入活動事件;
2、輸出活動s數組及f數組;
2、計算最優活動安排后,輸出最優i事件列表。
輸入:
請輸入s數組:
請輸入f數組:
輸出
s=15,3,2,8.....
f=18,5,4,10.....
i=1,5,8
Java源代碼:
package shiyan;
import java.util.Scanner;
public class shiyan3 {
public static void main(String[] args) {
int number=10; //活動數量10個
int[] s = new int[number]; //開始時間數組
int[] f = new int[number]; //結束時間數組
System.out.println("請分別輸入"+number+"個活動的開始時間:");
Scanner in_s = new Scanner(System.in);//循環輸入開始時間數組
for(int i=0;i<number;i++){
s[i]=in_s.nextInt();}
System.out.println("請分別輸入"+number+"個活動的結束時間:");
Scanner in_f = new Scanner(System.in);//循環輸入結束時間數組
for(int i=0;i<number;i++){
f[i]=in_f.nextInt();}
System.out.println("開始時間數組s[10]:");
for(int i=0;i<number;i++){ //輸出兩個數組
System.out.print("["+s[i]+"]"); }
System.out.println("\n結束時間數組f[10]:");
for(int i=0;i<number;i++){
System.out.print("["+f[i]+"]"); }
boolean[] a=new boolean[s.length]; //一個與活動數目等長的 boolean型數組記錄每個活動的狀態
shiyan3 ac = new shiyan3();
int counts=ac.Activity_arrangement(s, f, a);
System.out.println("\n活動集合中最大相容活動數量為:"+counts);
for(int i=1;i<=s.length-1;i++){
if(a[i]){
System.out.println("第"+i+"活動被選中,其開始時間為:"+s[i-1]+",結束時間為:"+f[i-1]); } } }
public int Activity_arrangement(int[] s,int[] f,boolean[] a){
int n=s.length-1;
a[1]=true; //第一個活動被選中
int j=1;
int count=1; //被選中活動的數量,默認第一個活動被選中
for(int i=2;i<=n;i++){
if(s[i]>=f[j]){ //下一個活動開始時間大於大於等於上一個活動結束時間
a[i]=true;
j=i;
count++; }
else{
a[i]=false;
}
}
return count;
運行結果如下:

