问题描述:
设有n(1≤n≤100)个顾客同时等待一项服务。顾客i需要的服务时间为ti,1≤i≤n,共有s处提供此服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小。平均等待时间是n个顾客的等待时间(含服务时间)总和除以n。编写一个贪心算法,计算n个顾客的最小平均等待时间及各处的顾客服务次序。
提示:
谈心策略:最短服务时间优先。
输入数据:
第一行,顾客数n及服务处数s,用空格分隔;
第二行开始的n行,每行描述一个顾客,每行两个数,分别是顾客号及他需要的服务时间,用空格分隔。
输出数据
第一行,平均等待时间;
第二行开始的s行,每行描述1处,第1个数为服务处编号,其后为按服务次序先后给出的顾客号,由空格分隔;
算法思想:
算法思想:
该算法使用贪心思想,贪心策略是客户按服务时间长短决定被服务次序,服务时间短的优先被服务,且前往下一个最快能结束服务的服务点
接受服务。
1、定义一个time数组记录每个服务点目前的时间,每服务一个客户time[服务点号]加上该客户的服务时间。
2、随后对每个服务点的目前时间进行比较,数值最小的服务点即为最快能接受服务的服务点,该服务点进行服务,
该客户的等待时间waited_time即为该服务点的目前时间time[服务点号],并记录好该客户接受服务的服务点号served_point
3、将每个用户的等待时间相加,再除以客户的总数,即得到平均服务时间
头文件代码:
定义了一个类、声明了用到的各个成员变量,公有的service函数是调用贪心算法的入口
MultiService.h:
#ifndef MULTISERVICE_H_INCLUDED
#define MULTISERVICE_H_INCLUDED
#include<iostream>
#include<fstream>
#include<malloc.h>
using namespace std;
class MultiService
{
typedef struct Custom
{
int number;
float service_time; //该客户需要的服务时间
float waited_time; //该客户已经等待的时间
int served_point; //记录该客户被服务的服务处的编号
}Custom ,*Customs; //定义结构体数组,记录一个顾客的编号以及服务时间
Customs customs;
int custom_number; //顾