您的位置:首页 > 其它

贪心算法

2016-03-07 10:34 357 查看
1 活动安排问题

#include <iostream>
#include <vector>   // vector
#include <iterator> //ostream_iterator
#include <algorithm> //stable_sort

using namespace std;

// 活动信息
class Activity
{
public:
Activity(int beg, int end)
{
m_tEnd = end;
m_tBegin = beg;
m_tShow = true;
}

friend bool operator < (const Activity & a,const Activity &b)
{
return a.m_tEnd < b.m_tEnd;
}

bool operator >= (const Activity & b)
{
return this->m_tBegin >= b.m_tEnd;
}

friend ostream & operator << (ostream & out, const Activity & act){

if ( act.m_tShow == true)
{
out << act.m_tBegin << "  " << act.m_tEnd << endl;
}

return out;
}

private:
int m_tEnd;
int m_tBegin;
bool m_tShow;   //是否被安排

public:
friend class Arrange;   //友元类,可以更改本类属性
};

//活动安排类
class Arrange
{
public:
Arrange(vector<Activity> &actVec){
m_actVec = actVec;
}

void arrangeActivity()
{
// 按照结束时间早晚排序
_sortWithEnd();

auto comp = m_actVec.begin();

for (auto it = m_actVec.begin()+1; it != m_actVec.end(); it++)
{
if (*it >= *comp)
{
comp = it;
}
else
it->m_tShow = false;
}

// 输出
copy(m_actVec.begin(), m_actVec.end(), ostream_iterator<Activity>(cout, ""));
}

private:
vector<Activity> m_actVec;

private:
void _sortWithEnd()
{
stable_sort(m_actVec.begin(), m_actVec.end());
//      copy(m_actVec.begin(), m_actVec.end(), ostream_iterator<Activity>(cout,""));
}
};

int main()
{
vector<Activity> actVec;

actVec.push_back(Activity(1, 4));
actVec.push_back(Activity(3, 5));
actVec.push_back(Activity(0, 6));
actVec.push_back(Activity(5, 7));
actVec.push_back(Activity(3, 8));
actVec.push_back(Activity(5, 9));
actVec.push_back(Activity(6, 10));
actVec.push_back(Activity(8, 11));
actVec.push_back(Activity(8, 12));
actVec.push_back(Activity(2, 13));
actVec.push_back(Activity(12, 14));

Arrange arr(actVec);
arr.arrangeActivity();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: