marci@69: #ifndef DIMACS_HH marci@69: #define DIMACS_HH marci@69: marci@69: #include marci@69: #include marci@69: #include marci@69: alpar@105: namespace hugo { marci@69: marci@69: template marci@69: void readDimacsMaxFlow(std::istream& is, Graph &G, typename Graph::NodeIt &s, typename Graph::NodeIt &t, CapacityMap& capacity) { marci@69: G.clear(); marci@69: int cap; marci@69: char d; marci@69: std::string problem; marci@69: char c; marci@69: int i, j; marci@69: std::string str; marci@69: int n, m; marci@69: std::vector nodes; marci@69: while (is>>c) { marci@69: switch (c) { marci@69: case 'c': //comment marci@69: getline(is, str); marci@69: break; marci@69: case 't': //type marci@69: getline(is, str); marci@69: break; marci@69: case 'p': //problem definition marci@69: is >> problem >> n >> m; marci@69: getline(is, str); marci@69: nodes.resize(n+1); marci@69: for (int k=1; k<=n; ++k) nodes[k]=G.addNode(); marci@69: break; marci@69: case 'n': //node definition marci@69: if (problem=="sp") { //shortest path problem marci@69: is >> i; marci@69: getline(is, str); marci@69: s=nodes[i]; marci@69: } marci@69: if (problem=="max") { //max flow problem marci@69: is >> i >> d; marci@69: getline(is, str); marci@69: if (d=='s') s=nodes[i]; marci@69: if (d=='t') t=nodes[i]; marci@69: } marci@69: break; marci@69: case 'a': marci@69: is >> i >> j >> cap; marci@69: getline(is, str); marci@69: typename Graph::EdgeIt e=G.addEdge(nodes[i], nodes[j]); alpar@105: capacity.update(); marci@69: capacity.set(e, cap); marci@69: break; marci@69: } marci@69: } marci@69: } marci@69: alpar@105: } //namespace hugo marci@69: marci@69: #endif //DIMACS_HH