アルゴリズム実践活動スケジューリング問題(c)

ここに画像の説明を挿入します
ここに画像の説明を挿入します
問題解決のアイデア:これは典型的な欲張りアルゴリズムの問​​題です。つまり、全体を考慮せず、局所的な最適解に焦点を当て
ます。問題を解決するための合計3つのステップがあります。最初に、タイムテーブルを入力する方法ここでは、終了時間をベンチマークとして使用して、小さいものから大きいものに並べ替え、最後に欲張りアルゴリズムを使用して順番にトラバースし、適切なアクティビティと出力を見つけます。

#include <stdio.h> 
main()
{
    
    
	int arr[2][100];
	int n;
	int i,j,end,temp;
	int k = 0;
	int add = 1;
	
	scanf("%d",&n);
	//第一步:数据导入
	for(i = 0;i < 2;i++){
    
    
		for(j = 0;j < n;j++){
    
    
			scanf("%d",&arr[i][j]);
		}
	}
	//第二布:数据排序
	for(i = 0;i < n;i++){
    
    
		temp = arr[1][i];
		k = i;
		for(j = i;j < n;j++){
    
    
			if(arr[1][j] < temp)
			{
    
    
				temp = arr[1][j];
				k = j;
			}
		}
		temp = arr[0][i];
		arr[0][i] = arr[0][k];
		arr[0][k] = temp;
		
		temp = arr[1][i];
		arr[1][i] = arr[1][k];
		arr[1][k] = temp;
	}
	//第三布:遍历寻找
	end = arr[1][0];
	printf("第%d个活动被安排:%d开始,%d结束,\n",1,arr[0][1],arr[1][1]);
	for(i = 1;i < n;i++){
    
    
		if(arr[0][i] > end){
    
    
			printf("第%d个活动被安排:%d开始,%d结束,\n",i+1,arr[0][i],arr[1][i]);
			end = arr[1][i];
			add++;
		}
	}
	printf("总共%d个活动被安排",add);
}

おすすめ

転載: blog.csdn.net/baldicoot_/article/details/105390141