Tak, tady je ten finální kód
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 3; //pocet pokladen
const int M = 2; //pocet zakazniku
const int P = 3; //max. pocet polozek v nakupu
struct cus{ //zakaznik
int id;
int items;
cus *next;
};
struct queue{ //fronta
cus *head, *tail;
int size;
};
bool isEmpty(queue arr[]){ //kontrola pole, jestli je prazdne
int sum = 0; //pocet prazdnych front
for(int i = 0; i < N; ++i){
if(arr[i].size == 0){
sum++;
}
}
if(sum == N){
return true;
}
return false;
}
void init(queue arr[]){ //inicializace pole na zacatku
for(int i = 0; i < N; ++i){
arr[i].head = arr[i].tail = NULL;
arr[i].size = 0;
}
}
int main(){
queue *arr = new queue[N];
init(arr);
int total = 1; //poradi zakazniku
srand(time(NULL)); //pro urceni nahodneho cisla nakupu
do{
//generovani noveho zakaznika
if(total <= M){
cus *newC = new cus; //novy zakaznik
newC->id = total;
newC->items = rand() % P + 1;
cout << "G" << newC->id << "[" << newC->items << "]" << " ";
++total;
//urceni nejkratsi fronty a zarazeni zakaznika
int qMin = 0; //index nejkratsi fronty
int lMin = arr[0].size; //delka nejkratsi fronty
for(int i = 0; i < N; ++i){
if(lMin > arr[i].size){
lMin = arr[i].size;
qMin = i;
}
}
//zarazeni zakaznika na konec nejkratsi fronty
if(arr[qMin].head == NULL){
arr[qMin].head = newC;
arr[qMin].head->next = NULL;
}else if(arr[qMin].tail == NULL){
arr[qMin].head->next = newC;
arr[qMin].tail = newC;
arr[qMin].tail->next = NULL;
}else{
arr[qMin].tail->next = newC;
arr[qMin].tail = newC;
arr[qMin].tail->next = NULL;
}
arr[qMin].size++; //zvetsim velikost pole +1
cout << "V" << newC->id << "[F" << qMin << "]" << " ";
}
//"odbaveni" zakaznika na pokladne
for(int i = 0; i < N; ++i){ //prochazim pokladny a hledam, jestli je na headu hodnota - zakaznik
if (arr != NULL && arr[i].head != NULL) {
if (arr[i].head->items == 0){
cout << "O" << arr[i].head->id << "[" << arr[i].size -1 << "] ";
arr[i].head = arr[i].head->next;
if(arr[i].head == arr[i].tail){
arr[i].tail = NULL;
}
arr[i].size--;
}else{
arr[i].head->items--;
cout << "K" << arr[i].head->id << "[" << arr[i].head->items << "] ";
}
}
}
}while(isEmpty(arr) == false);
cout << endl;
delete []arr;
return 0;
}