Witam,
mam problem z listą w C++. Mam do zaimplementowania algorytm szeregowania zadań na dwóch maszynach, gdzie tylko na pierwszej występują dziury(wyłączenie maszyny na konserwację) o stałej długości. Przerwy pomiędzy dziurami mogą mieć dowolną wartość. Algorytm ma zwrócić rozwiązanie z najmniejszym opóźnieniem - stąd jedna ze zmiennych to deadline. Wpadłem na taki pomysł aby maszyny były reprezentowane przez listy obiektów. Obiektów będą dwa typy - dziury i zadania. Na poniższym kodzie znajduje się moja próba umiejscowienia dziur na pierwszej maszynie. Chciałbym aby dziury zajmowały co drugi indeks czyli 0,2,4,6... itd. Niech pozostałe "wolne" indeksy będą dla zadań. Oczywiście może być tak że zadanie nie zmieści się w którąś z przerw pomiędzy dziurami - tutaj chciałem dać ifa, o błędnej instancji.
Reasumując:
Czy jest możliwe wstawienie obiektów na co drugie miejsca na liście, a potem wstawienie kolejnych w przerwy?
Drugie pytanie, czy będzie możliwe przeprowadzenie wszystkich możliwych permutacji obiektów-zdań bez "dotykania" dziur? Zastosuję algorytm brue force, ale zoptymalizuję go poprzez dodanie ograniczenia górnego i dolnego.
Oto kod:
#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <cstddef>
using namespace std;
class Zadanie
{
public:
int index, czas_wyk, deadline, okres;
bool czy_zadanie;
Zadanie(int czas_wyk, int okres){}
Zadanie(int index, int okres, int czas_wyk, int deadline, bool czy_zadanie){}
};
int main()
{
int index, czas_wyk, deadline, okres;
bool czy_zadanie;
list<Zadanie>::iterator i;
list<Zadanie> M1;
list<Zadanie> M2;
int q=0;
i = M1.begin();
while(q != 3)
{
cin >> czas_wyk >> okres;
czy_zadanie = false;
Zadanie *dziura = new Zadanie(czas_wyk, okres);
//M1.push_back(*dziura);
M1.insert(i,*dziura);
i++;
i++;
q++;
}
for(list<Zadanie>::iterator iter=M1.begin(); iter != M1.end(); ++iter)
{
cout << iter->czas_wyk << " " << iter->okres << endl;
}
cout << M1.size();
return 0;
}