Potrzebuję pomocy z algorytmem przydziału zadań metodą węgierską. W moim programie są zrobione jego 2 kroki. Nie wiem jak zrobić kolejne kroki (w sumie są 4). Wielkim programistą nie jestem, więc nie oczekujcie cudów ;)
<code=c++>
#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <ctime>
#include <fstream>
#include <string.h>
#include <cstdio>
using namespace std;
struct Zadanie
{
int index;
int czas;
};
void WykonajAlgorytym(const int, Zadanie *, Zadanie *);
void WyswietlTablice(int, Zadanie *, Zadanie *);
char WczytajWybor();
int main(int argc, char *argv[])
{
char wybor;
do
{
srand(time(NULL));
wybor = WczytajWybor();
int iloscZadan;
Zadanie *tabM1, *tabM2;
switch(wybor)
{
case '1':
{
char nazwaPliku[100];
cout << "Podaj nazwe pliku: ";
cin >> nazwaPliku;
strcat(nazwaPliku, ".txt");
ifstream plik;
plik.open(nazwaPliku, std::ios::in);
string napis;
getline(plik, napis);
char * chr = _strdup(napis.c_str());
int nIloscZadan = atoi(chr);
tabM1 = new Zadanie [nIloscZadan];
tabM2 = new Zadanie [nIloscZadan];
for(int j = 0; j < nIloscZadan; j++)
{
string napis;
getline(plik, napis);
chr = _strdup(napis.c_str());
tabM1[j].czas = atoi(chr);
tabM1[j].index = j;
}
for(int j = 0; j < nIloscZadan; j++)
{
string napis;
getline(plik, napis);
chr = _strdup(napis.c_str());
tabM2[j].czas = atoi(chr);
tabM2[j].index = j;
}
WyswietlTablice(nIloscZadan, tabM1, tabM2);
WykonajAlgorytym(nIloscZadan, tabM1, tabM2);
_getch();
}
delete [] tabM1;
delete [] tabM2;
break; // Losowanie danych
case '2':
cout << "Podaj ilosc zdan: ";
do
{
cin >> iloscZadan;
if(iloscZadan <= 0)
cout << "Ilosc zadan musi byc wieksza od zera: \n";
}
while(iloscZadan <= 0);
tabM1 = new Zadanie [iloscZadan];
tabM2 = new Zadanie [iloscZadan];
for(int i = 0; i < iloscZadan; i++)
{
tabM1[i].index = i;
tabM1[i].czas = rand() % 5;
tabM2[i].index = i;
tabM2[i].czas = rand() % 5;
}
WyswietlTablice(iloscZadan, tabM1, tabM2);
WykonajAlgorytym(iloscZadan, tabM1, tabM2);
_getch();
delete [] tabM1;
delete [] tabM2;
break;
}
}
while(wybor != '3');
return EXIT_SUCCESS;
}
char WczytajWybor()
{
char wybor;
do
{
system("cls");
cout << "1) Wczytanie danych z pliku.\n" << "2) Wczytanie danych losowych.\n" << "3) Koniec.\n";
wybor = _getch();
}
while(!(wybor == '1' || wybor == '2' || wybor == '3'));
return wybor;
}
void WyswietlTablice(int n, Zadanie * M1, Zadanie * M2)
{
for(int i = 0; i < n; i++)
{
cout << M1[i].czas << "\t";
}
cout << endl;
for(int i = 0; i < n; i++)
{
cout << M2[i].czas << "\t";
}
cout << endl;
}
void WykonajAlgorytym(const int n, Zadanie * tabM1, Zadanie * tabM2)
{
Zadanie *M1, *M2, temp;
M1 = new Zadanie [n];
M2 = new Zadanie [n];
int iloscM1 = 0, iloscM2 = 0;
for(int i = 0; i < n; i++)
{
if(tabM1[i].czas < tabM2[i].czas)
{
M1[iloscM1].czas = tabM1[i].czas;
M1[iloscM1].index = tabM1[i].index;
iloscM1++;
}
else
{
M2[iloscM2].czas = tabM2[i].czas;
M2[iloscM2].index = tabM2[i].index;
iloscM2++;
}
}
for(int j = iloscM1 - 2, i;j >= 0; j--)
{
temp.czas = M1[j].czas;
temp.index = M1[j].index;
i = j + 1;
while((i < iloscM1) && (temp.czas > M1[i].czas))
{
M1[i - 1].czas = M1[i].czas;
M1[i - 1].index = M1[i].index;
i++;
}
M1[i - 1].czas = temp.czas;
M1[i - 1].index = temp.index;
}
for(int j = iloscM2 - 2, i;j >= 0; j--)
{
temp.czas = M2[j].czas;
temp.index = M2[j].index;
i = j + 1;
while((i < iloscM2) && (temp.czas < M2[i].czas))
{
M2[i - 1].czas = M2[i].czas;
M2[i - 1].index = M2[i].index;
i++;
}
M2[i - 1].czas = temp.czas;
M2[i - 1].index = temp.index;
}
Zadanie *Wynik;
Wynik = new Zadanie [n];
int indexWyniku = 0;
for(int i = 0; i < iloscM1; i++)
{
Wynik[indexWyniku].czas = M1[i].czas;
Wynik[indexWyniku].index = M1[i].index;
indexWyniku++;
}
for(int i = 0; i < iloscM2; i++)
{
Wynik[indexWyniku].czas = M2[i].czas;
Wynik[indexWyniku].index = M2[i].index;
indexWyniku++;
}
cout << endl;
for(int i = 0; i < n; i++)
{
cout << Wynik[i].index << "\t";
}
cout << endl;
cout << "Wyswietla N1: \n";
for(int i = 0; i < iloscM1; i++)
{
cout << M1[i].czas << "\t";
}
cout << endl;
cout << "Wyswietla N2: \n";
for(int i = 0; i < iloscM2; i++)
{
cout << M2[i].czas << "\t";
}
cout << endl;
system("pause");
}
<\code>