Created
November 26, 2017 13:26
-
-
Save Florian3k/192f40a67290d5ef9e716fd7d2dec914 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void calcDelivery(int stock[], int demand[], int n) | |
{ | |
int begin = 0; | |
int end = 0; | |
int deficit = 0; | |
for (int i = 0; i < n; ++i) { | |
int diff = stock[i] - demand[i]; | |
if ( deficit == 0 ) { | |
if ( diff > 0 ) { // nadwyżka, przesuwamy ją dalej | |
transport( i, i + 1, diff ); | |
stock[i+1] += diff; // nie musimy zmniejszać w stock[i], nie będzie to już brane pod uwagę | |
} else if ( diff < 0 ) { // zaczynamy naliczać deficyt | |
begin = i; | |
deficit += -diff; | |
} //else: nic, idziemy dalej | |
} else { | |
deficit += -diff; | |
if ( deficit <= 0 ) { // zlikwidowaliśmy deficyt | |
if ( deficit < 0 ) { // zlikwidowaliśmy deficyt, i mamy nadwyżkę - przesuwamy ją w prawo | |
diff = -deficit; | |
transport( i, i + 1, diff ); | |
stock[i] -= diff; | |
stock[i+1] += diff; | |
} | |
end = i; | |
for (int j = end; j > begin; --j) { // przesuwamy szczepionki w lewo, od end aż do begin | |
diff = stock[j] - demand[j]; // aktualizujemy ilośc do przeniesienia | |
transport( j, j - 1, diff ); | |
stock[j-1] += diff; // nie msimy zmniejszać w stock[j], nie będzie to już brane pod uwagę | |
} | |
} //else: nadal deficyt, idziemy w prawo | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment