zoukankan      html  css  js  c++  java
  • 贪心算法之活动规划

    问题描述:有N个活动,活动i的开始时间为Si,结束时间为fi。那么如何在N个活动之间,找出活动时间不冲突的活动组合呢?

    原理参考《算法导论》。

    代码如下:

    常规的activity_selector函数

    int activity_selector(int *s, int *f, int i, int n) {
        int m = i + 1;
        while (i != -1 && m < n && s[m] < f[i]) //找到兼容的活动m
            m++;
        if (m < n) {
            printf("a%d ", m);
            return activity_selector(s, f, m, n);
        }
        else 
            return 0;
    }

    贪心下的greedy_activity_selector函数

    void greedy_activity_selector(int *s, int *f, int n) {
        for (int m = 0, i = -1; m < n; m++) {
            if (i == -1 || s[m] >= f[i]) {
                printf("a%d ", m);
                i = m;//贪心
            }
        }
    }

    数据录入

        int s[] = { 1,3,0,5,3,5,6,8,8,2,12 }, f[] = { 4,5,6,7,8,9,10,11,12,13,14 };//s是活动起始时间,f是活动结束时间

    Main函数

    int main()
    {
        int s[] = { 1,3,0,5,3,5,6,8,8,2,12 }, f[] = { 4,5,6,7,8,9,10,11,12,13,14 };//s是活动起始时间,f是活动结束时间
        activity_selector(s, f, -1, LENGTH(s));
        printf("
    贪心算法....
    ");
        greedy_activity_selector(s, f, LENGTH(s));
        return 0;
    }

    测试结果图(老规矩,转换为了C语言数据下标):

    所有代码均经过测试,结果正确!

  • 相关阅读:
    主键、外键
    SpringBoot定时任务Scheduled
    启动报DataSource错误
    SpringBoot整合aop
    元数据MetaData(五)
    普通结果集ResultSet和离线结果集RowSet(四)
    Statements、PreparedStatement及CallableStatement(三)
    JDBC数据库连接(二)
    JDBC简介(一)
    【Oracle】常用函数
  • 原文地址:https://www.cnblogs.com/dalgleish/p/9166783.html
Copyright © 2011-2022 走看看