diff -r 8572feccddcf -r 24c2c2989e0f src/work/marci/dimacs.hh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/work/marci/dimacs.hh Mon Feb 09 13:11:10 2004 +0000 @@ -0,0 +1,61 @@ +#ifndef DIMACS_HH +#define DIMACS_HH + +#include +#include +#include + +namespace marci { + + template + void readDimacsMaxFlow(std::istream& is, Graph &G, typename Graph::NodeIt &s, typename Graph::NodeIt &t, CapacityMap& capacity) { + G.clear(); + int cap; + char d; + std::string problem; + char c; + int i, j; + std::string str; + int n, m; + std::vector nodes; + while (is>>c) { + switch (c) { + case 'c': //comment + getline(is, str); + break; + case 't': //type + getline(is, str); + break; + case 'p': //problem definition + is >> problem >> n >> m; + getline(is, str); + nodes.resize(n+1); + for (int k=1; k<=n; ++k) nodes[k]=G.addNode(); + break; + case 'n': //node definition + if (problem=="sp") { //shortest path problem + is >> i; + getline(is, str); + s=nodes[i]; + } + if (problem=="max") { //max flow problem + is >> i >> d; + getline(is, str); + if (d=='s') s=nodes[i]; + if (d=='t') t=nodes[i]; + } + break; + case 'a': + is >> i >> j >> cap; + getline(is, str); + typename Graph::EdgeIt e=G.addEdge(nodes[i], nodes[j]); + capacity.resize(); + capacity.set(e, cap); + break; + } + } + } + +} //namespace marci + +#endif //DIMACS_HH