Changeset 509:635a8375227d in lemon-1.1
- Timestamp:
- 02/23/09 12:48:47 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/dimacs.h
r440 r509 296 296 } 297 297 298 /// DIMACS plain digraph reader function. 299 /// 300 /// This function reads a digraph without any designated nodes and 298 template<typename Graph> 299 typename enable_if<lemon::UndirectedTagIndicator<Graph>,void>::type 300 _addArcEdge(Graph &g, typename Graph::Node s, typename Graph::Node t, 301 dummy<0> = 0) 302 { 303 g.addEdge(s,t); 304 } 305 template<typename Graph> 306 typename disable_if<lemon::UndirectedTagIndicator<Graph>,void>::type 307 _addArcEdge(Graph &g, typename Graph::Node s, typename Graph::Node t, 308 dummy<1> = 1) 309 { 310 g.addArc(s,t); 311 } 312 313 /// DIMACS plain (di)graph reader function. 314 /// 315 /// This function reads a (di)graph without any designated nodes and 301 316 /// maps from DIMACS format, i.e. from DIMACS files having a line 302 317 /// starting with … … 308 323 /// If the file type was previously evaluated by dimacsType(), then 309 324 /// the descriptor struct should be given by the \c dest parameter. 310 template<typename Digraph> 311 void readDimacsMat(std::istream& is, Digraph &g, 312 DimacsDescriptor desc=DimacsDescriptor()) { 313 typename Digraph::Node u,v; 314 NullMap<typename Digraph::Arc, int> n; 325 template<typename Graph> 326 void readDimacsMat(std::istream& is, Graph &g, 327 DimacsDescriptor desc=DimacsDescriptor()) 328 { 315 329 if(desc.type==DimacsDescriptor::NONE) desc=dimacsType(is); 316 330 if(desc.type!=DimacsDescriptor::MAT) 317 331 throw FormatError("Problem type mismatch"); 318 _readDimacs(is, g, n, u, v, desc); 332 333 g.clear(); 334 std::vector<typename Graph::Node> nodes; 335 char c; 336 int i, j; 337 std::string str; 338 nodes.resize(desc.nodeNum + 1); 339 for (int k = 1; k <= desc.nodeNum; ++k) { 340 nodes[k] = g.addNode(); 341 } 342 343 while (is >> c) { 344 switch (c) { 345 case 'c': // comment line 346 getline(is, str); 347 break; 348 case 'n': // node definition line 349 break; 350 case 'a': // arc (arc) definition line 351 is >> i >> j; 352 getline(is, str); 353 _addArcEdge(g,nodes[i], nodes[j]); 354 break; 355 } 356 } 319 357 } 320 358
Note: See TracChangeset
for help on using the changeset viewer.