equal
  deleted
  inserted
  replaced
  
    
    
    29 /// \file  | 
    29 /// \file  | 
    30 /// \brief DIMACS file format reader.  | 
    30 /// \brief DIMACS file format reader.  | 
    31   | 
    31   | 
    32 namespace lemon { | 
    32 namespace lemon { | 
    33   | 
    33   | 
    34   ///@defgroup dimacs_group DIMACS format  | 
         | 
    35   ///\brief Read and write files in DIMACS format  | 
         | 
    36   ///  | 
         | 
    37   ///Tools to read a digraph from or write it to a file in DIMACS format  | 
         | 
    38   ///data  | 
         | 
    39   ///\ingroup io_group  | 
         | 
    40   | 
         | 
    41   /// \addtogroup dimacs_group  | 
    34   /// \addtogroup dimacs_group  | 
    42   /// @{ | 
    35   /// @{ | 
    43   | 
         | 
    44   | 
    36   | 
    45   /// DIMACS file type descriptor.  | 
    37   /// DIMACS file type descriptor.  | 
    46   struct DimacsDescriptor  | 
    38   struct DimacsDescriptor  | 
    47   { | 
    39   { | 
    48     ///File type enum  | 
    40     ///File type enum  | 
    50       { | 
    42       { | 
    51         NONE, MIN, MAX, SP, MAT  | 
    43         NONE, MIN, MAX, SP, MAT  | 
    52       };  | 
    44       };  | 
    53     ///The file type  | 
    45     ///The file type  | 
    54     Type type;  | 
    46     Type type;  | 
    55     ///The number of nodes on the graph  | 
    47     ///The number of nodes in the graph  | 
    56     int nodeNum;  | 
    48     int nodeNum;  | 
    57     ///The number of edges on the graph  | 
    49     ///The number of edges in the graph  | 
    58     int edgeNum;  | 
    50     int edgeNum;  | 
    59     int lineShift;  | 
    51     int lineShift;  | 
    60     /// Constructor. Sets the type to NONE.  | 
    52     /// Constructor. Sets the type to NONE.  | 
    61     DimacsDescriptor() : type(NONE) {} | 
    53     DimacsDescriptor() : type(NONE) {} | 
    62   };  | 
    54   };  | 
    63   | 
    55   | 
    64   ///Discover the type of a DIMACS file  | 
    56   ///Discover the type of a DIMACS file  | 
    65   | 
    57   | 
    66   ///It starts seeking the begining of the file for the problem type  | 
    58   ///It starts seeking the begining of the file for the problem type  | 
    67   ///and size info. The found date is returned in a special struct  | 
    59   ///and size info. The found data is returned in a special struct  | 
    68   ///that can be evaluated and passed to the appropriate reader  | 
    60   ///that can be evaluated and passed to the appropriate reader  | 
    69   ///function.  | 
    61   ///function.  | 
    70   DimacsDescriptor dimacsType(std::istream& is)  | 
    62   DimacsDescriptor dimacsType(std::istream& is)  | 
    71   { | 
    63   { | 
    72     DimacsDescriptor r;  | 
    64     DimacsDescriptor r;  | 
   103     throw FormatError("Missing problem type declaration."); | 
    95     throw FormatError("Missing problem type declaration."); | 
   104   }  | 
    96   }  | 
   105   | 
    97   | 
   106   | 
    98   | 
   107   | 
    99   | 
   108   /// DIMACS min cost flow reader function.  | 
   100   /// DIMACS minimum cost flow reader function.  | 
   109   ///  | 
   101   ///  | 
   110   /// This function reads a min cost flow instance from DIMACS format,  | 
   102   /// This function reads a minimum cost flow instance from DIMACS format,  | 
   111   /// i.e. from DIMACS files having a line starting with  | 
   103   /// i.e. from a DIMACS file having a line starting with  | 
   112   /// \code  | 
   104   /// \code  | 
   113   ///   p min  | 
   105   ///   p min  | 
   114   /// \endcode  | 
   106   /// \endcode  | 
   115   /// At the beginning, \c g is cleared by \c g.clear(). The supply  | 
   107   /// At the beginning, \c g is cleared by \c g.clear(). The supply  | 
   116   /// amount of the nodes are written to \c supply (signed). The  | 
   108   /// amount of the nodes are written to \c supply (signed). The  | 
   228         break;  | 
   220         break;  | 
   229       }  | 
   221       }  | 
   230     }  | 
   222     }  | 
   231   }  | 
   223   }  | 
   232   | 
   224   | 
   233   /// DIMACS max flow reader function.  | 
   225   /// DIMACS maximum flow reader function.  | 
   234   ///  | 
   226   ///  | 
   235   /// This function reads a max flow instance from DIMACS format,  | 
   227   /// This function reads a maximum flow instance from DIMACS format,  | 
   236   /// i.e. from DIMACS files having a line starting with  | 
   228   /// i.e. from a DIMACS file having a line starting with  | 
   237   /// \code  | 
   229   /// \code  | 
   238   ///   p max  | 
   230   ///   p max  | 
   239   /// \endcode  | 
   231   /// \endcode  | 
   240   /// At the beginning, \c g is cleared by \c g.clear(). The arc  | 
   232   /// At the beginning, \c g is cleared by \c g.clear(). The arc  | 
   241   /// capacities are written to \c capacity and \c s and \c t are  | 
   233   /// capacities are written to \c capacity and \c s and \c t are  | 
   257   }  | 
   249   }  | 
   258   | 
   250   | 
   259   /// DIMACS shortest path reader function.  | 
   251   /// DIMACS shortest path reader function.  | 
   260   ///  | 
   252   ///  | 
   261   /// This function reads a shortest path instance from DIMACS format,  | 
   253   /// This function reads a shortest path instance from DIMACS format,  | 
   262   /// i.e. from DIMACS files having a line starting with  | 
   254   /// i.e. from a DIMACS file having a line starting with  | 
   263   /// \code  | 
   255   /// \code  | 
   264   ///   p sp  | 
   256   ///   p sp  | 
   265   /// \endcode  | 
   257   /// \endcode  | 
   266   /// At the beginning, \c g is cleared by \c g.clear(). The arc  | 
   258   /// At the beginning, \c g is cleared by \c g.clear(). The arc  | 
   267   /// lengths are written to \c lenght and \c s is set to the  | 
   259   /// lengths are written to \c length and \c s is set to the  | 
   268   /// source node.  | 
   260   /// source node.  | 
   269   ///  | 
   261   ///  | 
   270   /// If the file type was previously evaluated by dimacsType(), then  | 
   262   /// If the file type was previously evaluated by dimacsType(), then  | 
   271   /// the descriptor struct should be given by the \c dest parameter.  | 
   263   /// the descriptor struct should be given by the \c dest parameter.  | 
   272   template<typename Digraph, typename LengthMap>  | 
   264   template<typename Digraph, typename LengthMap>  |