算法导论活动选择问题

来源:互联网 发布:unity3d asset store 编辑:程序博客网 时间:2024/06/01 08:38
#include "stdafx.h"#include <iostream>#include <vector>#include <stack>using namespace std;//虚拟了一个活动,使他一定选择a1位第一个活动//注意这里的结束时间是单调增的//递归的写法如下vector<int>result;vector<int> ActiveSelect(vector<int> start, vector<int>end, int k, int n){    int m = k + 1;//k位当前选择,m为检验后面一个是不是开始时间大于它的结束时间    while (m <= n&&start[m] < end[k])        m++;//如果不是,下一个活动    if (m <= n)    {        result.push_back(m);//选择的活动        ActiveSelect(start, end, m, n);//递归调用    }    return result;}//循环写法vector<int> ActiveSelect1(vector<int>start, vector<int>end){    result.push_back(1);    int k = 1;    for (int m = 2; m <end.size(); m++)    {        if (start[m]>=end[k])        {            result.push_back(m);            k = m;        }    }    return result;}int main(){    vector<int>start = {0,1,3,0,5,3,5,6,8,8,2,12 };    vector<int>end = { 0,4,5,6,7,8,9,10,11,12,14,16 };    vector<int>result;    //result = ActiveSelect(start, end, 0, 11);    result = ActiveSelect1(start, end);    for (auto c : result)        cout << c << endl;}
0 0
原创粉丝点击