double rflow(std::vector<std::vector<int>> graph);.
Táto funkcia vypočíta -tokové číslo grafu pre a . To znamená, že v nikde nulovom -toku môžete ako tokové hodnoty používať reálne čísla z .
double r2chebyshevflow(std::vector<std::vector<int>> graph);.
Táto funkcia vypočíta -tokové číslo grafu pre a
. To znamená, že v nikde nulovom -toku môžete ako tokové hodnoty používať dvojice reálnych čísel také, že aspoň jedna zložka je v absolútnej hodnote väčšia rovná .
graph.size() vrcholov, ktoré sú označené číslami od 0 po graph.size()-1. Hrana medzi vrcholmi i a j existuje práve vtedy, keď graph[i] obsahuje j a graph[j] obsahuje i. Navyše graph[i] obsahuje j
práve vtedy, keď graph[j] obsahuje i (graf je neorientovaný).
Môžete predpokladať, že vstupný graf je kubický a bezmostový a že optimálna hodnota je nanajvýš (vyplýva to zo Seymourovej vety o -toku). Problémy vyriešte konverziou na celočíselné lineárne programovanie. Ako nástroj na výpočet lineárneho programovania a celočíselného lineárneho programovania použite
lp_solve.
Na uľahčenie práce sme napisali malý wrapper
(nemusíte ho použiť, objekt primárne zabaľuje C-čkovský interface, do C++-kovskej triedy).
Zoznam funkcií knižnice lpsolve nájdete tu.
Naprogramovali sme pre vás malý ukážkový projekt.
⚠ Pokiaľ nenastavíte inak, premenné v lp_solve sú nezáporné. Ak chcete, aby vaše premenné nadobúdali záporné hodnoty, musíte použit funkciu set_bounds. ⚠