貪心算法求解活動安排<算法分析>


一、實驗內容及要求
 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;  

 運行結果如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM