Gantt图 工作排序

甘特图(Gantt chart)又称为 横道图、条状图(Bar chart)。以提出者亨利·L·甘特先生的名字命名。
甘特图内在思想简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间。基本是一条线条图, 横轴表示时间, 纵轴表示活动(项目),线条表示在整个期间上计划和实际的活动完成情况。它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。管理者由此可便利地弄清一项任务(项目)还剩下哪些工作要做,并可评估工作进度。




#include<iostream>
#include<algorithm>
using namespace std;
typedef struct tagSltem
{
   int t;
   int  nIndex;
   bool bFirst;


   bool operator < (struct tagSltem& item) const
   {
      return t < item.t;
   }
} Sltem;


void GanttChart(const int *a, const int *b, int *c, int size)
{
int i;
int s2=2*size;
//整理数据
Sltem* pltem=new Sltem[s2]; //0~size个为执行任务1的时间,size~2*size为执行任务2的时间
for(i=0;i<size;i++)
{
  pltem[i].t=a[i];
  pltem[i].nIndex=i;
  pltem[i].bFirst=true;


  pltem[size+i].t=b[i];
  pltem[size+i].nIndex=i;
  pltem[size+i].bFirst=false;
}
sort(pltem,pltem+s2);


bool* bArrage = new bool[size];//d[i]:第i号已经安排
for(i=0;i<size;i++)
  bArrage[i]=false;
int from=0;
int to=size-1;
for(i=0; i<s2; i++)
{
  if(bArrage[pltem[i].nIndex])//pltem[i].nIndex已经确定
  continue;
  bArrage[pltem[i].nIndex]=true;
  if(pltem[i].bFirst)//策略:最小的时间是第一个任务则先执行
  {
     c[from]=pltem[i].nIndex;
 from++;
  }
  else              //策略:最小的时间是第二个任务则放在尾部
  {
     c[to]=pltem[i].nIndex;
 to--;
  }
  if(to-from<0)//提前退出
  break;
}


delete[] pltem;
delete[] bArrage;
}


void Print(int *c,int n)
{
   for(int i=0; i<n; i++)
   {
      cout<<*(c+i)<<"  ";
   }
}


int main()
{
int a[]={8,6,2,4};
int b[]={3,1,3,12};
int n=sizeof(a)/sizeof(int);
int *c=new int[n];
GanttChart(a,b,c,n);//Gantt图
Print(c,n);
delete[] c;
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值