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
. ⚠