贪心策略,多机调度
#include<bits/stdc++.h>
using namespace std;
int project[100];
int M[100];
vector<int> project_x;
struct x{
vector<int> s;
}S[100];
int partition(int a[],int left,int right)
{
int exchange = 0;
int i = left;
int j = right + 1;
int t = a[left];
while(1)
{
while( a[--j] >= t && j > left)
;
while( a[++i] < t && i < right)
;
if( i < j )
{
exchange = a[j];
a[j] = a[i];
a[i] = exchange;
}
else
{
break;
}
}
exchange = a[j];
a[j] = t;
a[left] = exchange;
return j;
}
void Quicksort(int a[],int first,int end)
{
int pivot = 0;
if(first < end)
{
pivot = partition(a, first, end);
Quicksort(a, pivot + 1, end);
Quicksort(a, first, pivot - 1);
}
}
int main()
{
int m, n;
cout << "请输入机器数量: \n";
cin >> m;
cout << "请输入作业数量: \n";
cin >> n;
cout << "请输入各个作业的执行时间: \n";
for (int i = 0; i < n; i++)
{
cin >> project[i];
}
Quicksort(project, 0, n - 1);
cout << "快速排序后:\n";
for (int i = 0; i < n; i++)
{
cout << project[i] << " ";
}
cout << endl;
cout << "倒着看排序:\n";
for (int i = n - 1; i >= 0; i--)
{
project_x.push_back(project[i]);
}
for (int i = 0; i < project_x.size(); i++)
{
cout << project_x[i]<<" ";
}
cout << endl;
for (int i = 0; i < m; i++)
{
M[i] = project_x[i];
S[i].s.push_back(i);
}
int min = 0;
int j = 0;
for (int i = m; i < n; i++)
{
min = M[0];
j = 0;
for (int k = 1; k < m; k++)
{
if ( M[k] < min)
{
min = M[k];
j = k;
}
}
S[j].s.push_back(i);
M[j] += project_x[i];
}
for (int i = 0; i < m; i++)
{
cout << "机器:" << i << "的作业队列: ";
for (int j = 0; j < S[i].s.size(); j++)
{
cout << project_x[S[i].s[j]]<<" ";
}
cout << "总工作时间为: " << M[i];
cout << endl;
}
system("pause");
}
![在这里插入图片描述]()