贪心算法——活动安排问题

187 阅读1分钟
#include <iostream>
using namespace std;
const int n = 11;
void GreedSelector(int n, int s[], int f[], int A[])
{
    A[1] = 1;   // 第一个活动直接被选择
    int j = 1;
    for (int i = 2; i <= n; i++)
    {

        if (s[i] >= f[j])
        {
            A[i] = 1;
            j = i;
        }
        else
        {
            A[i] = 0;
        }
    }
}
int main()
{
    int s[12] = {0, 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12};  // s:各个活动的开始时间
    int f[12] = {0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};  // f:各个活动的结束时间(算法开始前已经按此排好序)
    int A[n + 1];  // 路径数组(用来记录最优解)最优解
    GreedSelector(n, s, f, A);
    cout << "最大相容活动安排为:" << endl;
    for (int i = 1; i <= n; i++)
    {
        if (A[i])
        {
            cout << "[" << i << "]:" << "(" << s[i] << "," << f[i] << ")" << endl;
        }
    }

    return 0;
}