//#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
void swapw(int &x, int &y)
{
int temp;
temp = x;
x = y;
y = temp;
}
void task(int *d, int *w, int n)
{
int i,j;
int *a = (int *) malloc ((n+1) * sizeof(int));
int *b = (int *) malloc ((n+1) * sizeof(int));
int *sn = (int *) malloc ((n+1) * sizeof(int));
for(i=0;i<=n;i++)
{
a[i]=0;
b[i]=0;
}
sn[0]=10000;
for(i = 1; i <= n; i++)
{
sn[i] = i;
}
for(i = 1; i < n; i++)
{
for(j = i + 1; j <= n; j++)
{
if(w[sn[i]] <w[sn[j]])
{
swapw(sn[i], sn[j]);
}
}
}
int k=1,t=1,f=1;
int count=0;
a[1]=sn[1];
for(int i2=1;i2<=n;i2++)//a[]所有元素
{
int j=1;
while(j<=f)
{
count=0;
for(i=1;i<=f;i++)
{
if(d[a[i]]<=j)
count++;
}
if(count>j)
{
b[t]=sn[k];
a[f]=0;
t++;
break;
}
++j;
}
++f;
++k;
a[f]=sn[k];
}
cout<<"我们选择的任务是:";
for(int i1=1;i1<=n;i1++)
{
if(a[i1]!=0)
cout<<"a"<<a[i1]<<" ";
}
cout<<endl;
cout<<"我们放弃的任务是:";
for(i=1;i<=n;i++)
{
if(b[i]!=0)
cout<<"a"<<b[i]<<" ";
}
cout<<endl;
cout<<"总的惩罚量是:";
int sum=0;
for(i=1;i<t;i++)
{
sum+=w[b[i]];
}
cout<<sum<<endl;
}
int main()
{
int n = 0;
int i = 0;
cout<<"请输入任务个数:"<<endl;
cin>>n;
int *d = (int *) malloc ((n+1) * sizeof(int));
cout<<"请输入每个任务的期限(期限值大于等于1并且小于等于"<<n<<":"<<endl;
d[0] =100;
for(i = 1; i < n+1; i++)
{
cin>>d[i];
}
for(i = 1; i < n+1; i++)
{
if(d[i] > n)
{
cout<<endl<<"任务a"<<i<<"的期限非法,请重新输入:"<<endl;
cin>>d[i];
}
}
//输入惩罚序列
int *w = (int *) malloc ((n+1) * sizeof(int));
cout<<endl<<"请输入每个任务的惩罚:"<<endl;
w[0] = 0;
for(i = 1; i < n+1; i++)
{
cin>>w[i];
}
task(d, w, n);
cout<<endl<<endl<<"使用max{w}-wi替换wi后的各任务惩罚为:"<<endl;
int max = 0;
for(i = 1; i <= n; i++)
if(w[i] > max)
max = w[i];
for(i = 1; i <= n; i++)
{
w[i] = max - w[i];
cout<<w[i]<<" ";
}
cout<<endl<<endl<<"算法运行结果为:"<<endl;
task(d, w, n);
system("pause");
return 0;
}
任务调度问题
最新推荐文章于 2022-12-06 18:49:37 发布