gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Improve the function-type interface of bfs, dfs, and dijkstra (ticket #96) - BfsWizard and DfsWizard have run(s), run(s,t), and run() functions, DijkstraWizard has run(s) and run(s,t) functions. - Set NodeMap<T> instead of NullMap as PredMap and DistMap in the default traits classes for the function-type interface. - Modify the related test files. - Doc improvements. - Bug fix in concepts/path.h.
0 7 0
default
7 files changed with 488 insertions and 338 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -30,2 +30,3 @@
30 30
#include <lemon/maps.h>
31
#include <lemon/path.h>
31 32

	
... ...
@@ -117,3 +118,3 @@
117 118
  ///
118
  ///There is also a \ref bfs() "function type interface" for the BFS
119
  ///There is also a \ref bfs() "function-type interface" for the BFS
119 120
  ///algorithm, which is convenient in the simplier cases and it can be
... ...
@@ -843,3 +844,3 @@
843 844
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
844
    typedef NullMap<typename Digraph::Node,typename Digraph::Arc> PredMap;
845
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
845 846
    ///Instantiates a \ref PredMap.
... ...
@@ -850,9 +851,5 @@
850 851
    ///\todo The digraph alone may be insufficient to initialize
851
#ifdef DOXYGEN
852 852
    static PredMap *createPredMap(const Digraph &g)
853
#else
854
    static PredMap *createPredMap(const Digraph &)
855
#endif
856 853
    {
857
      return new PredMap();
854
      return new PredMap(g);
858 855
    }
... ...
@@ -863,2 +860,3 @@
863 860
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
861
    ///By default it is a NullMap.
864 862
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
... ...
@@ -897,4 +895,3 @@
897 895
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
898
    ///
899
    typedef NullMap<typename Digraph::Node,int> DistMap;
896
    typedef typename Digraph::template NodeMap<int> DistMap;
900 897
    ///Instantiates a \ref DistMap.
... ...
@@ -904,10 +901,12 @@
904 901
    ///the \ref DistMap
905
#ifdef DOXYGEN
906 902
    static DistMap *createDistMap(const Digraph &g)
907
#else
908
    static DistMap *createDistMap(const Digraph &)
909
#endif
910 903
    {
911
      return new DistMap();
904
      return new DistMap(g);
912 905
    }
906

	
907
    ///The type of the shortest paths.
908

	
909
    ///The type of the shortest paths.
910
    ///It must meet the \ref concepts::Path "Path" concept.
911
    typedef lemon::Path<Digraph> Path;
913 912
  };
... ...
@@ -941,4 +940,6 @@
941 940
    void *_dist;
942
    //Pointer to the source node.
943
    Node _source;
941
    //Pointer to the shortest path to the target node.
942
    void *_path;
943
    //Pointer to the distance of the target node.
944
    int *_di;
944 945

	
... ...
@@ -948,5 +949,5 @@
948 949
    /// This constructor does not require parameters, therefore it initiates
949
    /// all of the attributes to default values (0, INVALID).
950
    /// all of the attributes to \c 0.
950 951
    BfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0),
951
                      _dist(0), _source(INVALID) {}
952
                      _dist(0), _path(0), _di(0) {}
952 953

	
... ...
@@ -954,10 +955,8 @@
954 955

	
955
    /// This constructor requires some parameters,
956
    /// listed in the parameters list.
957
    /// Others are initiated to 0.
956
    /// This constructor requires one parameter,
957
    /// others are initiated to \c 0.
958 958
    /// \param g The digraph the algorithm runs on.
959
    /// \param s The source node.
960
    BfsWizardBase(const GR &g, Node s=INVALID) :
959
    BfsWizardBase(const GR &g) :
961 960
      _g(reinterpret_cast<void*>(const_cast<GR*>(&g))),
962
      _reached(0), _processed(0), _pred(0), _dist(0), _source(s) {}
961
      _reached(0), _processed(0), _pred(0), _dist(0),  _path(0), _di(0) {}
963 962

	
... ...
@@ -965,23 +964,11 @@
965 964

	
966
  /// Auxiliary class for the function type interface of BFS algorithm.
965
  /// Auxiliary class for the function-type interface of BFS algorithm.
967 966

	
968
  /// This auxiliary class is created to implement the function type
969
  /// interface of \ref Bfs algorithm. It uses the functions and features
970
  /// of the plain \ref Bfs, but it is much simpler to use it.
971
  /// It should only be used through the \ref bfs() function, which makes
972
  /// it easier to use the algorithm.
967
  /// This auxiliary class is created to implement the
968
  /// \ref bfs() "function-type interface" of \ref Bfs algorithm.
969
  /// It does not have own \ref run() method, it uses the functions
970
  /// and features of the plain \ref Bfs.
973 971
  ///
974
  /// Simplicity means that the way to change the types defined
975
  /// in the traits class is based on functions that returns the new class
976
  /// and not on templatable built-in classes.
977
  /// When using the plain \ref Bfs
978
  /// the new class with the modified type comes from
979
  /// the original class by using the ::
980
  /// operator. In the case of \ref BfsWizard only
981
  /// a function have to be called, and it will
982
  /// return the needed class.
983
  ///
984
  /// It does not have own \ref run() method. When its \ref run() method
985
  /// is called, it initiates a plain \ref Bfs object, and calls the
986
  /// \ref Bfs::run() method of it.
972
  /// This class should only be used through the \ref bfs() function,
973
  /// which makes it easier to use the algorithm.
987 974
  template<class TR>
... ...
@@ -1008,2 +995,4 @@
1008 995
    typedef typename TR::ProcessedMap ProcessedMap;
996
    ///The type of the shortest paths
997
    typedef typename TR::Path Path;
1009 998

	
... ...
@@ -1018,4 +1007,5 @@
1018 1007
    /// These parameters will be the default values for the traits class.
1019
    BfsWizard(const Digraph &g, Node s=INVALID) :
1020
      TR(g,s) {}
1008
    /// \param g The digraph the algorithm runs on.
1009
    BfsWizard(const Digraph &g) :
1010
      TR(g) {}
1021 1011

	
... ...
@@ -1026,39 +1016,57 @@
1026 1016

	
1027
    ///Runs BFS algorithm from a source node.
1017
    ///Runs BFS algorithm from the given source node.
1028 1018

	
1029
    ///Runs BFS algorithm from a source node.
1030
    ///The node can be given with the \ref source() function.
1019
    ///This method runs BFS algorithm from node \c s
1020
    ///in order to compute the shortest path to each node.
1021
    void run(Node s)
1022
    {
1023
      Bfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
1024
      if (Base::_pred)
1025
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1026
      if (Base::_dist)
1027
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1028
      if (Base::_reached)
1029
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
1030
      if (Base::_processed)
1031
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1032
      if (s!=INVALID)
1033
        alg.run(s);
1034
      else
1035
        alg.run();
1036
    }
1037

	
1038
    ///Finds the shortest path between \c s and \c t.
1039

	
1040
    ///This method runs BFS algorithm from node \c s
1041
    ///in order to compute the shortest path to node \c t
1042
    ///(it stops searching when \c t is processed).
1043
    ///
1044
    ///\return \c true if \c t is reachable form \c s.
1045
    bool run(Node s, Node t)
1046
    {
1047
      if (s==INVALID || t==INVALID) throw UninitializedParameter();
1048
      Bfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
1049
      if (Base::_pred)
1050
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1051
      if (Base::_dist)
1052
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1053
      if (Base::_reached)
1054
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
1055
      if (Base::_processed)
1056
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1057
      alg.run(s,t);
1058
      if (Base::_path)
1059
        *reinterpret_cast<Path*>(Base::_path) = alg.path(t);
1060
      if (Base::_di)
1061
        *Base::_di = alg.dist(t);
1062
      return alg.reached(t);
1063
    }
1064

	
1065
    ///Runs BFS algorithm to visit all nodes in the digraph.
1066

	
1067
    ///This method runs BFS algorithm in order to compute
1068
    ///the shortest path to each node.
1031 1069
    void run()
1032 1070
    {
1033
      if(Base::_source==INVALID) throw UninitializedParameter();
1034
      Bfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
1035
      if(Base::_reached)
1036
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
1037
      if(Base::_processed)
1038
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1039
      if(Base::_pred)
1040
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1041
      if(Base::_dist)
1042
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1043
      alg.run(Base::_source);
1044
    }
1045

	
1046
    ///Runs BFS algorithm from the given node.
1047

	
1048
    ///Runs BFS algorithm from the given node.
1049
    ///\param s is the given source.
1050
    void run(Node s)
1051
    {
1052
      Base::_source=s;
1053
      run();
1054
    }
1055

	
1056
    /// Sets the source node, from which the Bfs algorithm runs.
1057

	
1058
    /// Sets the source node, from which the Bfs algorithm runs.
1059
    /// \param s is the source node.
1060
    BfsWizard<TR> &source(Node s)
1061
    {
1062
      Base::_source=s;
1063
      return *this;
1071
      run(INVALID);
1064 1072
    }
... ...
@@ -1071,6 +1079,6 @@
1071 1079
    };
1072
    ///\brief \ref named-templ-param "Named parameter"
1080
    ///\brief \ref named-func-param "Named parameter"
1073 1081
    ///for setting \ref PredMap object.
1074 1082
    ///
1075
    /// \ref named-templ-param "Named parameter"
1083
    ///\ref named-func-param "Named parameter"
1076 1084
    ///for setting \ref PredMap object.
... ...
@@ -1089,6 +1097,6 @@
1089 1097
    };
1090
    ///\brief \ref named-templ-param "Named parameter"
1098
    ///\brief \ref named-func-param "Named parameter"
1091 1099
    ///for setting \ref ReachedMap object.
1092 1100
    ///
1093
    /// \ref named-templ-param "Named parameter"
1101
    /// \ref named-func-param "Named parameter"
1094 1102
    ///for setting \ref ReachedMap object.
... ...
@@ -1102,2 +1110,20 @@
1102 1110
    template<class T>
1111
    struct SetDistMapBase : public Base {
1112
      typedef T DistMap;
1113
      static DistMap *createDistMap(const Digraph &) { return 0; };
1114
      SetDistMapBase(const TR &b) : TR(b) {}
1115
    };
1116
    ///\brief \ref named-func-param "Named parameter"
1117
    ///for setting \ref DistMap object.
1118
    ///
1119
    /// \ref named-func-param "Named parameter"
1120
    ///for setting \ref DistMap object.
1121
    template<class T>
1122
    BfsWizard<SetDistMapBase<T> > distMap(const T &t)
1123
    {
1124
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1125
      return BfsWizard<SetDistMapBase<T> >(*this);
1126
    }
1127

	
1128
    template<class T>
1103 1129
    struct SetProcessedMapBase : public Base {
... ...
@@ -1107,6 +1133,6 @@
1107 1133
    };
1108
    ///\brief \ref named-templ-param "Named parameter"
1134
    ///\brief \ref named-func-param "Named parameter"
1109 1135
    ///for setting \ref ProcessedMap object.
1110 1136
    ///
1111
    /// \ref named-templ-param "Named parameter"
1137
    /// \ref named-func-param "Named parameter"
1112 1138
    ///for setting \ref ProcessedMap object.
... ...
@@ -1120,17 +1146,27 @@
1120 1146
    template<class T>
1121
    struct SetDistMapBase : public Base {
1122
      typedef T DistMap;
1123
      static DistMap *createDistMap(const Digraph &) { return 0; };
1124
      SetDistMapBase(const TR &b) : TR(b) {}
1147
    struct SetPathBase : public Base {
1148
      typedef T Path;
1149
      SetPathBase(const TR &b) : TR(b) {}
1125 1150
    };
1126
    ///\brief \ref named-templ-param "Named parameter"
1127
    ///for setting \ref DistMap object.
1151
    ///\brief \ref named-func-param "Named parameter"
1152
    ///for getting the shortest path to the target node.
1128 1153
    ///
1129
    /// \ref named-templ-param "Named parameter"
1130
    ///for setting \ref DistMap object.
1154
    ///\ref named-func-param "Named parameter"
1155
    ///for getting the shortest path to the target node.
1131 1156
    template<class T>
1132
    BfsWizard<SetDistMapBase<T> > distMap(const T &t)
1157
    BfsWizard<SetPathBase<T> > path(const T &t)
1133 1158
    {
1134
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1135
      return BfsWizard<SetDistMapBase<T> >(*this);
1159
      Base::_path=reinterpret_cast<void*>(const_cast<T*>(&t));
1160
      return BfsWizard<SetPathBase<T> >(*this);
1161
    }
1162

	
1163
    ///\brief \ref named-func-param "Named parameter"
1164
    ///for getting the distance of the target node.
1165
    ///
1166
    ///\ref named-func-param "Named parameter"
1167
    ///for getting the distance of the target node.
1168
    BfsWizard dist(const int &d)
1169
    {
1170
      Base::_di=const_cast<int*>(&d);
1171
      return *this;
1136 1172
    }
... ...
@@ -1139,14 +1175,16 @@
1139 1175

	
1140
  ///Function type interface for Bfs algorithm.
1176
  ///Function-type interface for BFS algorithm.
1141 1177

	
1142 1178
  /// \ingroup search
1143
  ///Function type interface for Bfs algorithm.
1179
  ///Function-type interface for BFS algorithm.
1144 1180
  ///
1145
  ///This function also has several
1146
  ///\ref named-templ-func-param "named parameters",
1181
  ///This function also has several \ref named-func-param "named parameters",
1147 1182
  ///they are declared as the members of class \ref BfsWizard.
1148
  ///The following
1149
  ///example shows how to use these parameters.
1183
  ///The following examples show how to use these parameters.
1150 1184
  ///\code
1151
  ///  bfs(g,source).predMap(preds).run();
1185
  ///  // Compute shortest path from node s to each node
1186
  ///  bfs(g).predMap(preds).distMap(dists).run(s);
1187
  ///
1188
  ///  // Compute shortest path from s to t
1189
  ///  bool reached = bfs(g).path(p).dist(d).run(s,t);
1152 1190
  ///\endcode
... ...
@@ -1158,5 +1196,5 @@
1158 1196
  BfsWizard<BfsWizardBase<GR> >
1159
  bfs(const GR &g,typename GR::Node s=INVALID)
1197
  bfs(const GR &digraph)
1160 1198
  {
1161
    return BfsWizard<BfsWizardBase<GR> >(g,s);
1199
    return BfsWizard<BfsWizardBase<GR> >(digraph);
1162 1200
  }
Ignore white space 6 line context
... ...
@@ -68,3 +68,6 @@
68 68
      template <typename CPath>
69
      Path& operator=(const CPath& cpath) {}
69
      Path& operator=(const CPath& cpath) {
70
        ignore_unused_variable_warning(cpath);
71
        return *this;
72
      }
70 73

	
Ignore white space 6 line context
... ...
@@ -31,2 +31,3 @@
31 31
#include <lemon/maps.h>
32
#include <lemon/path.h>
32 33

	
... ...
@@ -118,3 +119,3 @@
118 119
  ///
119
  ///There is also a \ref dfs() "function type interface" for the DFS
120
  ///There is also a \ref dfs() "function-type interface" for the DFS
120 121
  ///algorithm, which is convenient in the simplier cases and it can be
... ...
@@ -777,4 +778,3 @@
777 778
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
778
    ///
779
    typedef NullMap<typename Digraph::Node,typename Digraph::Arc> PredMap;
779
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
780 780
    ///Instantiates a \ref PredMap.
... ...
@@ -785,9 +785,5 @@
785 785
    ///\todo The digraph alone may be insufficient to initialize
786
#ifdef DOXYGEN
787 786
    static PredMap *createPredMap(const Digraph &g)
788
#else
789
    static PredMap *createPredMap(const Digraph &)
790
#endif
791 787
    {
792
      return new PredMap();
788
      return new PredMap(g);
793 789
    }
... ...
@@ -798,2 +794,3 @@
798 794
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
795
    ///By default it is a NullMap.
799 796
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
... ...
@@ -832,4 +829,3 @@
832 829
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
833
    ///
834
    typedef NullMap<typename Digraph::Node,int> DistMap;
830
    typedef typename Digraph::template NodeMap<int> DistMap;
835 831
    ///Instantiates a \ref DistMap.
... ...
@@ -839,10 +835,12 @@
839 835
    ///the \ref DistMap
840
#ifdef DOXYGEN
841 836
    static DistMap *createDistMap(const Digraph &g)
842
#else
843
    static DistMap *createDistMap(const Digraph &)
844
#endif
845 837
    {
846
      return new DistMap();
838
      return new DistMap(g);
847 839
    }
840

	
841
    ///The type of the DFS paths.
842

	
843
    ///The type of the DFS paths.
844
    ///It must meet the \ref concepts::Path "Path" concept.
845
    typedef lemon::Path<Digraph> Path;
848 846
  };
... ...
@@ -876,4 +874,6 @@
876 874
    void *_dist;
877
    //Pointer to the source node.
878
    Node _source;
875
    //Pointer to the DFS path to the target node.
876
    void *_path;
877
    //Pointer to the distance of the target node.
878
    int *_di;
879 879

	
... ...
@@ -883,5 +883,5 @@
883 883
    /// This constructor does not require parameters, therefore it initiates
884
    /// all of the attributes to default values (0, INVALID).
884
    /// all of the attributes to \c 0.
885 885
    DfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0),
886
                      _dist(0), _source(INVALID) {}
886
                      _dist(0), _path(0), _di(0) {}
887 887

	
... ...
@@ -889,10 +889,8 @@
889 889

	
890
    /// This constructor requires some parameters,
891
    /// listed in the parameters list.
892
    /// Others are initiated to 0.
890
    /// This constructor requires one parameter,
891
    /// others are initiated to \c 0.
893 892
    /// \param g The digraph the algorithm runs on.
894
    /// \param s The source node.
895
    DfsWizardBase(const GR &g, Node s=INVALID) :
893
    DfsWizardBase(const GR &g) :
896 894
      _g(reinterpret_cast<void*>(const_cast<GR*>(&g))),
897
      _reached(0), _processed(0), _pred(0), _dist(0), _source(s) {}
895
      _reached(0), _processed(0), _pred(0), _dist(0),  _path(0), _di(0) {}
898 896

	
... ...
@@ -900,23 +898,11 @@
900 898

	
901
  /// Auxiliary class for the function type interface of DFS algorithm.
899
  /// Auxiliary class for the function-type interface of DFS algorithm.
902 900

	
903
  /// This auxiliary class is created to implement the function type
904
  /// interface of \ref Dfs algorithm. It uses the functions and features
905
  /// of the plain \ref Dfs, but it is much simpler to use it.
906
  /// It should only be used through the \ref dfs() function, which makes
907
  /// it easier to use the algorithm.
901
  /// This auxiliary class is created to implement the
902
  /// \ref dfs() "function-type interface" of \ref Dfs algorithm.
903
  /// It does not have own \ref run() method, it uses the functions
904
  /// and features of the plain \ref Dfs.
908 905
  ///
909
  /// Simplicity means that the way to change the types defined
910
  /// in the traits class is based on functions that returns the new class
911
  /// and not on templatable built-in classes.
912
  /// When using the plain \ref Dfs
913
  /// the new class with the modified type comes from
914
  /// the original class by using the ::
915
  /// operator. In the case of \ref DfsWizard only
916
  /// a function have to be called, and it will
917
  /// return the needed class.
918
  ///
919
  /// It does not have own \ref run() method. When its \ref run() method
920
  /// is called, it initiates a plain \ref Dfs object, and calls the
921
  /// \ref Dfs::run() method of it.
906
  /// This class should only be used through the \ref dfs() function,
907
  /// which makes it easier to use the algorithm.
922 908
  template<class TR>
... ...
@@ -935,3 +921,3 @@
935 921
    ///\brief The type of the map that stores the predecessor
936
    ///arcs of the shortest paths.
922
    ///arcs of the DFS paths.
937 923
    typedef typename TR::PredMap PredMap;
... ...
@@ -943,2 +929,4 @@
943 929
    typedef typename TR::ProcessedMap ProcessedMap;
930
    ///The type of the DFS paths
931
    typedef typename TR::Path Path;
944 932

	
... ...
@@ -953,4 +941,5 @@
953 941
    /// These parameters will be the default values for the traits class.
954
    DfsWizard(const Digraph &g, Node s=INVALID) :
955
      TR(g,s) {}
942
    /// \param g The digraph the algorithm runs on.
943
    DfsWizard(const Digraph &g) :
944
      TR(g) {}
956 945

	
... ...
@@ -961,39 +950,57 @@
961 950

	
962
    ///Runs DFS algorithm from a source node.
951
    ///Runs DFS algorithm from the given source node.
963 952

	
964
    ///Runs DFS algorithm from a source node.
965
    ///The node can be given with the \ref source() function.
953
    ///This method runs DFS algorithm from node \c s
954
    ///in order to compute the DFS path to each node.
955
    void run(Node s)
956
    {
957
      Dfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
958
      if (Base::_pred)
959
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
960
      if (Base::_dist)
961
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
962
      if (Base::_reached)
963
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
964
      if (Base::_processed)
965
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
966
      if (s!=INVALID)
967
        alg.run(s);
968
      else
969
        alg.run();
970
    }
971

	
972
    ///Finds the DFS path between \c s and \c t.
973

	
974
    ///This method runs DFS algorithm from node \c s
975
    ///in order to compute the DFS path to node \c t
976
    ///(it stops searching when \c t is processed).
977
    ///
978
    ///\return \c true if \c t is reachable form \c s.
979
    bool run(Node s, Node t)
980
    {
981
      if (s==INVALID || t==INVALID) throw UninitializedParameter();
982
      Dfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
983
      if (Base::_pred)
984
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
985
      if (Base::_dist)
986
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
987
      if (Base::_reached)
988
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
989
      if (Base::_processed)
990
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
991
      alg.run(s,t);
992
      if (Base::_path)
993
        *reinterpret_cast<Path*>(Base::_path) = alg.path(t);
994
      if (Base::_di)
995
        *Base::_di = alg.dist(t);
996
      return alg.reached(t);
997
      }
998

	
999
    ///Runs DFS algorithm to visit all nodes in the digraph.
1000

	
1001
    ///This method runs DFS algorithm in order to compute
1002
    ///the DFS path to each node.
966 1003
    void run()
967 1004
    {
968
      if(Base::_source==INVALID) throw UninitializedParameter();
969
      Dfs<Digraph,TR> alg(*reinterpret_cast<const Digraph*>(Base::_g));
970
      if(Base::_reached)
971
        alg.reachedMap(*reinterpret_cast<ReachedMap*>(Base::_reached));
972
      if(Base::_processed)
973
        alg.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
974
      if(Base::_pred)
975
        alg.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
976
      if(Base::_dist)
977
        alg.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
978
      alg.run(Base::_source);
979
    }
980

	
981
    ///Runs DFS algorithm from the given node.
982

	
983
    ///Runs DFS algorithm from the given node.
984
    ///\param s is the given source.
985
    void run(Node s)
986
    {
987
      Base::_source=s;
988
      run();
989
    }
990

	
991
    /// Sets the source node, from which the Dfs algorithm runs.
992

	
993
    /// Sets the source node, from which the Dfs algorithm runs.
994
    /// \param s is the source node.
995
    DfsWizard<TR> &source(Node s)
996
    {
997
      Base::_source=s;
998
      return *this;
1005
      run(INVALID);
999 1006
    }
... ...
@@ -1006,6 +1013,6 @@
1006 1013
    };
1007
    ///\brief \ref named-templ-param "Named parameter"
1014
    ///\brief \ref named-func-param "Named parameter"
1008 1015
    ///for setting \ref PredMap object.
1009 1016
    ///
1010
    ///\ref named-templ-param "Named parameter"
1017
    ///\ref named-func-param "Named parameter"
1011 1018
    ///for setting \ref PredMap object.
... ...
@@ -1024,6 +1031,6 @@
1024 1031
    };
1025
    ///\brief \ref named-templ-param "Named parameter"
1032
    ///\brief \ref named-func-param "Named parameter"
1026 1033
    ///for setting \ref ReachedMap object.
1027 1034
    ///
1028
    /// \ref named-templ-param "Named parameter"
1035
    /// \ref named-func-param "Named parameter"
1029 1036
    ///for setting \ref ReachedMap object.
... ...
@@ -1037,2 +1044,20 @@
1037 1044
    template<class T>
1045
    struct SetDistMapBase : public Base {
1046
      typedef T DistMap;
1047
      static DistMap *createDistMap(const Digraph &) { return 0; };
1048
      SetDistMapBase(const TR &b) : TR(b) {}
1049
    };
1050
    ///\brief \ref named-func-param "Named parameter"
1051
    ///for setting \ref DistMap object.
1052
    ///
1053
    /// \ref named-func-param "Named parameter"
1054
    ///for setting \ref DistMap object.
1055
    template<class T>
1056
    DfsWizard<SetDistMapBase<T> > distMap(const T &t)
1057
    {
1058
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1059
      return DfsWizard<SetDistMapBase<T> >(*this);
1060
    }
1061

	
1062
    template<class T>
1038 1063
    struct SetProcessedMapBase : public Base {
... ...
@@ -1042,6 +1067,6 @@
1042 1067
    };
1043
    ///\brief \ref named-templ-param "Named parameter"
1068
    ///\brief \ref named-func-param "Named parameter"
1044 1069
    ///for setting \ref ProcessedMap object.
1045 1070
    ///
1046
    /// \ref named-templ-param "Named parameter"
1071
    /// \ref named-func-param "Named parameter"
1047 1072
    ///for setting \ref ProcessedMap object.
... ...
@@ -1055,17 +1080,27 @@
1055 1080
    template<class T>
1056
    struct SetDistMapBase : public Base {
1057
      typedef T DistMap;
1058
      static DistMap *createDistMap(const Digraph &) { return 0; };
1059
      SetDistMapBase(const TR &b) : TR(b) {}
1081
    struct SetPathBase : public Base {
1082
      typedef T Path;
1083
      SetPathBase(const TR &b) : TR(b) {}
1060 1084
    };
1061
    ///\brief \ref named-templ-param "Named parameter"
1062
    ///for setting \ref DistMap object.
1085
    ///\brief \ref named-func-param "Named parameter"
1086
    ///for getting the DFS path to the target node.
1063 1087
    ///
1064
    ///\ref named-templ-param "Named parameter"
1065
    ///for setting \ref DistMap object.
1088
    ///\ref named-func-param "Named parameter"
1089
    ///for getting the DFS path to the target node.
1066 1090
    template<class T>
1067
    DfsWizard<SetDistMapBase<T> > distMap(const T &t)
1091
    DfsWizard<SetPathBase<T> > path(const T &t)
1068 1092
    {
1069
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1070
      return DfsWizard<SetDistMapBase<T> >(*this);
1093
      Base::_path=reinterpret_cast<void*>(const_cast<T*>(&t));
1094
      return DfsWizard<SetPathBase<T> >(*this);
1095
    }
1096

	
1097
    ///\brief \ref named-func-param "Named parameter"
1098
    ///for getting the distance of the target node.
1099
    ///
1100
    ///\ref named-func-param "Named parameter"
1101
    ///for getting the distance of the target node.
1102
    DfsWizard dist(const int &d)
1103
    {
1104
      Base::_di=const_cast<int*>(&d);
1105
      return *this;
1071 1106
    }
... ...
@@ -1074,15 +1109,18 @@
1074 1109

	
1075
  ///Function type interface for Dfs algorithm.
1110
  ///Function-type interface for DFS algorithm.
1076 1111

	
1077 1112
  ///\ingroup search
1078
  ///Function type interface for Dfs algorithm.
1113
  ///Function-type interface for DFS algorithm.
1079 1114
  ///
1080
  ///This function also has several
1081
  ///\ref named-templ-func-param "named parameters",
1115
  ///This function also has several \ref named-func-param "named parameters",
1082 1116
  ///they are declared as the members of class \ref DfsWizard.
1083
  ///The following
1084
  ///example shows how to use these parameters.
1117
  ///The following examples show how to use these parameters.
1085 1118
  ///\code
1086
  ///  dfs(g,source).predMap(preds).run();
1119
  ///  // Compute the DFS tree
1120
  ///  dfs(g).predMap(preds).distMap(dists).run(s);
1121
  ///
1122
  ///  // Compute the DFS path from s to t
1123
  ///  bool reached = dfs(g).path(p).dist(d).run(s,t);
1087 1124
  ///\endcode
1125

	
1088 1126
  ///\warning Don't forget to put the \ref DfsWizard::run() "run()"
... ...
@@ -1093,5 +1131,5 @@
1093 1131
  DfsWizard<DfsWizardBase<GR> >
1094
  dfs(const GR &g,typename GR::Node s=INVALID)
1132
  dfs(const GR &digraph)
1095 1133
  {
1096
    return DfsWizard<DfsWizardBase<GR> >(g,s);
1134
    return DfsWizard<DfsWizardBase<GR> >(digraph);
1097 1135
  }
Show white space 6 line context
... ...
@@ -32,2 +32,3 @@
32 32
#include <lemon/maps.h>
33
#include <lemon/path.h>
33 34

	
... ...
@@ -201,3 +202,3 @@
201 202
  ///
202
  ///There is also a \ref dijkstra() "function type interface" for the
203
  ///There is also a \ref dijkstra() "function-type interface" for the
203 204
  ///%Dijkstra algorithm, which is convenient in the simplier cases and
... ...
@@ -989,3 +990,3 @@
989 990
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
990
    typedef NullMap <typename Digraph::Node,typename Digraph::Arc> PredMap;
991
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
991 992
    ///Instantiates a \ref PredMap.
... ...
@@ -996,9 +997,5 @@
996 997
    ///\todo The digraph alone may be insufficient to initialize
997
#ifdef DOXYGEN
998 998
    static PredMap *createPredMap(const Digraph &g)
999
#else
1000
    static PredMap *createPredMap(const Digraph &)
1001
#endif
1002 999
    {
1003
      return new PredMap();
1000
      return new PredMap(g);
1004 1001
    }
... ...
@@ -1032,3 +1029,3 @@
1032 1029
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
1033
    typedef NullMap<typename Digraph::Node,Value> DistMap;
1030
    typedef typename Digraph::template NodeMap<typename LM::Value> DistMap;
1034 1031
    ///Instantiates a \ref DistMap.
... ...
@@ -1038,10 +1035,12 @@
1038 1035
    ///the \ref DistMap
1039
#ifdef DOXYGEN
1040 1036
    static DistMap *createDistMap(const Digraph &g)
1041
#else
1042
    static DistMap *createDistMap(const Digraph &)
1043
#endif
1044 1037
    {
1045
      return new DistMap();
1038
      return new DistMap(g);
1046 1039
    }
1040

	
1041
    ///The type of the shortest paths.
1042

	
1043
    ///The type of the shortest paths.
1044
    ///It must meet the \ref concepts::Path "Path" concept.
1045
    typedef lemon::Path<Digraph> Path;
1047 1046
  };
... ...
@@ -1067,3 +1066,3 @@
1067 1066
    void *_g;
1068
    //Pointer to the length map
1067
    //Pointer to the length map.
1069 1068
    void *_length;
... ...
@@ -1075,4 +1074,6 @@
1075 1074
    void *_dist;
1076
    //Pointer to the source node.
1077
    Node _source;
1075
    //Pointer to the shortest path to the target node.
1076
    void *_path;
1077
    //Pointer to the distance of the target node.
1078
    void *_di;
1078 1079

	
... ...
@@ -1082,5 +1083,5 @@
1082 1083
    /// This constructor does not require parameters, therefore it initiates
1083
    /// all of the attributes to default values (0, INVALID).
1084
    /// all of the attributes to \c 0.
1084 1085
    DijkstraWizardBase() : _g(0), _length(0), _processed(0), _pred(0),
1085
                           _dist(0), _source(INVALID) {}
1086
                           _dist(0), _path(0), _di(0) {}
1086 1087

	
... ...
@@ -1088,12 +1089,10 @@
1088 1089

	
1089
    /// This constructor requires some parameters,
1090
    /// listed in the parameters list.
1091
    /// Others are initiated to 0.
1090
    /// This constructor requires two parameters,
1091
    /// others are initiated to \c 0.
1092 1092
    /// \param g The digraph the algorithm runs on.
1093 1093
    /// \param l The length map.
1094
    /// \param s The source node.
1095
    DijkstraWizardBase(const GR &g,const LM &l, Node s=INVALID) :
1094
    DijkstraWizardBase(const GR &g,const LM &l) :
1096 1095
      _g(reinterpret_cast<void*>(const_cast<GR*>(&g))),
1097 1096
      _length(reinterpret_cast<void*>(const_cast<LM*>(&l))),
1098
      _processed(0), _pred(0), _dist(0), _source(s) {}
1097
      _processed(0), _pred(0), _dist(0), _path(0), _di(0) {}
1099 1098

	
... ...
@@ -1101,23 +1100,11 @@
1101 1100

	
1102
  /// Auxiliary class for the function type interface of Dijkstra algorithm.
1101
  /// Auxiliary class for the function-type interface of Dijkstra algorithm.
1103 1102

	
1104
  /// This auxiliary class is created to implement the function type
1105
  /// interface of \ref Dijkstra algorithm. It uses the functions and features
1106
  /// of the plain \ref Dijkstra, but it is much simpler to use it.
1107
  /// It should only be used through the \ref dijkstra() function, which makes
1108
  /// it easier to use the algorithm.
1103
  /// This auxiliary class is created to implement the
1104
  /// \ref dijkstra() "function-type interface" of \ref Dijkstra algorithm.
1105
  /// It does not have own \ref run() method, it uses the functions
1106
  /// and features of the plain \ref Dijkstra.
1109 1107
  ///
1110
  /// Simplicity means that the way to change the types defined
1111
  /// in the traits class is based on functions that returns the new class
1112
  /// and not on templatable built-in classes.
1113
  /// When using the plain \ref Dijkstra
1114
  /// the new class with the modified type comes from
1115
  /// the original class by using the ::
1116
  /// operator. In the case of \ref DijkstraWizard only
1117
  /// a function have to be called, and it will
1118
  /// return the needed class.
1119
  ///
1120
  /// It does not have own \ref run() method. When its \ref run() method
1121
  /// is called, it initiates a plain \ref Dijkstra object, and calls the
1122
  /// \ref Dijkstra::run() method of it.
1108
  /// This class should only be used through the \ref dijkstra() function,
1109
  /// which makes it easier to use the algorithm.
1123 1110
  template<class TR>
... ...
@@ -1146,2 +1133,4 @@
1146 1133
    typedef typename TR::ProcessedMap ProcessedMap;
1134
    ///The type of the shortest paths
1135
    typedef typename TR::Path Path;
1147 1136
    ///The heap type used by the dijkstra algorithm.
... ...
@@ -1158,4 +1147,6 @@
1158 1147
    /// These parameters will be the default values for the traits class.
1159
    DijkstraWizard(const Digraph &g,const LengthMap &l, Node s=INVALID) :
1160
      TR(g,l,s) {}
1148
    /// \param g The digraph the algorithm runs on.
1149
    /// \param l The length map.
1150
    DijkstraWizard(const Digraph &g, const LengthMap &l) :
1151
      TR(g,l) {}
1161 1152

	
... ...
@@ -1166,39 +1157,46 @@
1166 1157

	
1167
    ///Runs Dijkstra algorithm from a source node.
1158
    ///Runs Dijkstra algorithm from the given source node.
1168 1159

	
1169
    ///Runs Dijkstra algorithm from a source node.
1170
    ///The node can be given with the \ref source() function.
1171
    void run()
1160
    ///This method runs %Dijkstra algorithm from the given source node
1161
    ///in order to compute the shortest path to each node.
1162
    void run(Node s)
1172 1163
    {
1173
      if(Base::_source==INVALID) throw UninitializedParameter();
1164
      if (s==INVALID) throw UninitializedParameter();
1174 1165
      Dijkstra<Digraph,LengthMap,TR>
1175
        dij(*reinterpret_cast<const Digraph*>(Base::_g),
1176
            *reinterpret_cast<const LengthMap*>(Base::_length));
1177
      if(Base::_processed)
1178
        dij.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1179
      if(Base::_pred)
1180
        dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1181
      if(Base::_dist)
1182
        dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1183
      dij.run(Base::_source);
1166
        dijk(*reinterpret_cast<const Digraph*>(Base::_g),
1167
             *reinterpret_cast<const LengthMap*>(Base::_length));
1168
      if (Base::_pred)
1169
        dijk.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1170
      if (Base::_dist)
1171
        dijk.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1172
      if (Base::_processed)
1173
        dijk.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1174
      dijk.run(s);
1184 1175
    }
1185 1176

	
1186
    ///Runs Dijkstra algorithm from the given node.
1177
    ///Finds the shortest path between \c s and \c t.
1187 1178

	
1188
    ///Runs Dijkstra algorithm from the given node.
1189
    ///\param s is the given source.
1190
    void run(Node s)
1179
    ///This method runs the %Dijkstra algorithm from node \c s
1180
    ///in order to compute the shortest path to node \c t
1181
    ///(it stops searching when \c t is processed).
1182
    ///
1183
    ///\return \c true if \c t is reachable form \c s.
1184
    bool run(Node s, Node t)
1191 1185
    {
1192
      Base::_source=s;
1193
      run();
1194
    }
1195

	
1196
    /// Sets the source node, from which the Dijkstra algorithm runs.
1197

	
1198
    /// Sets the source node, from which the Dijkstra algorithm runs.
1199
    /// \param s is the source node.
1200
    DijkstraWizard<TR> &source(Node s)
1201
    {
1202
      Base::_source=s;
1203
      return *this;
1186
      if (s==INVALID || t==INVALID) throw UninitializedParameter();
1187
      Dijkstra<Digraph,LengthMap,TR>
1188
        dijk(*reinterpret_cast<const Digraph*>(Base::_g),
1189
             *reinterpret_cast<const LengthMap*>(Base::_length));
1190
      if (Base::_pred)
1191
        dijk.predMap(*reinterpret_cast<PredMap*>(Base::_pred));
1192
      if (Base::_dist)
1193
        dijk.distMap(*reinterpret_cast<DistMap*>(Base::_dist));
1194
      if (Base::_processed)
1195
        dijk.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed));
1196
      dijk.run(s,t);
1197
      if (Base::_path)
1198
        *reinterpret_cast<Path*>(Base::_path) = dijk.path(t);
1199
      if (Base::_di)
1200
        *reinterpret_cast<Value*>(Base::_di) = dijk.dist(t);
1201
      return dijk.reached(t);
1204 1202
    }
... ...
@@ -1211,6 +1209,6 @@
1211 1209
    };
1212
    ///\brief \ref named-templ-param "Named parameter"
1210
    ///\brief \ref named-func-param "Named parameter"
1213 1211
    ///for setting \ref PredMap object.
1214 1212
    ///
1215
    ///\ref named-templ-param "Named parameter"
1213
    ///\ref named-func-param "Named parameter"
1216 1214
    ///for setting \ref PredMap object.
... ...
@@ -1224,2 +1222,20 @@
1224 1222
    template<class T>
1223
    struct SetDistMapBase : public Base {
1224
      typedef T DistMap;
1225
      static DistMap *createDistMap(const Digraph &) { return 0; };
1226
      SetDistMapBase(const TR &b) : TR(b) {}
1227
    };
1228
    ///\brief \ref named-func-param "Named parameter"
1229
    ///for setting \ref DistMap object.
1230
    ///
1231
    ///\ref named-func-param "Named parameter"
1232
    ///for setting \ref DistMap object.
1233
    template<class T>
1234
    DijkstraWizard<SetDistMapBase<T> > distMap(const T &t)
1235
    {
1236
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1237
      return DijkstraWizard<SetDistMapBase<T> >(*this);
1238
    }
1239

	
1240
    template<class T>
1225 1241
    struct SetProcessedMapBase : public Base {
... ...
@@ -1229,6 +1245,6 @@
1229 1245
    };
1230
    ///\brief \ref named-templ-param "Named parameter"
1246
    ///\brief \ref named-func-param "Named parameter"
1231 1247
    ///for setting \ref ProcessedMap object.
1232 1248
    ///
1233
    /// \ref named-templ-param "Named parameter"
1249
    /// \ref named-func-param "Named parameter"
1234 1250
    ///for setting \ref ProcessedMap object.
... ...
@@ -1242,17 +1258,27 @@
1242 1258
    template<class T>
1243
    struct SetDistMapBase : public Base {
1244
      typedef T DistMap;
1245
      static DistMap *createDistMap(const Digraph &) { return 0; };
1246
      SetDistMapBase(const TR &b) : TR(b) {}
1259
    struct SetPathBase : public Base {
1260
      typedef T Path;
1261
      SetPathBase(const TR &b) : TR(b) {}
1247 1262
    };
1248
    ///\brief \ref named-templ-param "Named parameter"
1249
    ///for setting \ref DistMap object.
1263
    ///\brief \ref named-func-param "Named parameter"
1264
    ///for getting the shortest path to the target node.
1250 1265
    ///
1251
    ///\ref named-templ-param "Named parameter"
1252
    ///for setting \ref DistMap object.
1266
    ///\ref named-func-param "Named parameter"
1267
    ///for getting the shortest path to the target node.
1253 1268
    template<class T>
1254
    DijkstraWizard<SetDistMapBase<T> > distMap(const T &t)
1269
    DijkstraWizard<SetPathBase<T> > path(const T &t)
1255 1270
    {
1256
      Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t));
1257
      return DijkstraWizard<SetDistMapBase<T> >(*this);
1271
      Base::_path=reinterpret_cast<void*>(const_cast<T*>(&t));
1272
      return DijkstraWizard<SetPathBase<T> >(*this);
1273
    }
1274

	
1275
    ///\brief \ref named-func-param "Named parameter"
1276
    ///for getting the distance of the target node.
1277
    ///
1278
    ///\ref named-func-param "Named parameter"
1279
    ///for getting the distance of the target node.
1280
    DijkstraWizard dist(const Value &d)
1281
    {
1282
      Base::_di=reinterpret_cast<void*>(const_cast<Value*>(&d));
1283
      return *this;
1258 1284
    }
... ...
@@ -1261,14 +1287,16 @@
1261 1287

	
1262
  ///Function type interface for Dijkstra algorithm.
1288
  ///Function-type interface for Dijkstra algorithm.
1263 1289

	
1264 1290
  /// \ingroup shortest_path
1265
  ///Function type interface for Dijkstra algorithm.
1291
  ///Function-type interface for Dijkstra algorithm.
1266 1292
  ///
1267
  ///This function also has several
1268
  ///\ref named-templ-func-param "named parameters",
1293
  ///This function also has several \ref named-func-param "named parameters",
1269 1294
  ///they are declared as the members of class \ref DijkstraWizard.
1270
  ///The following
1271
  ///example shows how to use these parameters.
1295
  ///The following examples show how to use these parameters.
1272 1296
  ///\code
1273
  ///  dijkstra(g,length,source).predMap(preds).run();
1297
  ///  // Compute shortest path from node s to each node
1298
  ///  dijkstra(g,length).predMap(preds).distMap(dists).run(s);
1299
  ///
1300
  ///  // Compute shortest path from s to t
1301
  ///  bool reached = dijkstra(g,length).path(p).dist(d).run(s,t);
1274 1302
  ///\endcode
... ...
@@ -1280,5 +1308,5 @@
1280 1308
  DijkstraWizard<DijkstraWizardBase<GR,LM> >
1281
  dijkstra(const GR &g,const LM &l,typename GR::Node s=INVALID)
1309
  dijkstra(const GR &digraph, const LM &length)
1282 1310
  {
1283
    return DijkstraWizard<DijkstraWizardBase<GR,LM> >(g,l,s);
1311
    return DijkstraWizard<DijkstraWizardBase<GR,LM> >(digraph,length);
1284 1312
  }
Ignore white space 6 line context
... ...
@@ -64,3 +64,2 @@
64 64
  BType::PredMap p(G);
65
  //  BType::PredNodeMap pn(G);
66 65

	
... ...
@@ -74,5 +73,3 @@
74 73
  d  = bfs_test.distMap();
75

	
76 74
  p  = bfs_test.predMap();
77
  //  pn = bfs_test.predNodeMap();
78 75
  b  = bfs_test.reached(n);
... ...
@@ -90,7 +87,9 @@
90 87
  Digraph g;
91
  bfs(g,Node()).run();
92
  bfs(g).source(Node()).run();
88
  bool b;
89
  bfs(g).run(Node());
90
  b=bfs(g).run(Node(),Node());
91
  bfs(g).run();
93 92
  bfs(g)
94
    .predMap(concepts::WriteMap<Node,Arc>())
95
    .distMap(concepts::WriteMap<Node,VType>())
93
    .predMap(concepts::ReadWriteMap<Node,Arc>())
94
    .distMap(concepts::ReadWriteMap<Node,VType>())
96 95
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
... ...
@@ -98,2 +97,16 @@
98 97
    .run(Node());
98
  b=bfs(g)
99
    .predMap(concepts::ReadWriteMap<Node,Arc>())
100
    .distMap(concepts::ReadWriteMap<Node,VType>())
101
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
102
    .processedMap(concepts::WriteMap<Node,bool>())
103
    .path(concepts::Path<Digraph>())
104
    .dist(VType())
105
    .run(Node(),Node());
106
  bfs(g)
107
    .predMap(concepts::ReadWriteMap<Node,Arc>())
108
    .distMap(concepts::ReadWriteMap<Node,VType>())
109
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
110
    .processedMap(concepts::WriteMap<Node,bool>())
111
    .run();
99 112
}
... ...
@@ -116,3 +129,3 @@
116 129

	
117
  check(bfs_test.dist(t)==2,"Bfs found a wrong path." << bfs_test.dist(t));
130
  check(bfs_test.dist(t)==2,"Bfs found a wrong path.");
118 131

	
... ...
@@ -130,3 +143,3 @@
130 143
           (bfs_test.dist(v) <= bfs_test.dist(u)+1),
131
           "Wrong output." << G.id(v) << ' ' << G.id(u));
144
           "Wrong output. " << G.id(u) << "->" << G.id(v));
132 145
  }
... ...
@@ -142,4 +155,3 @@
142 155
              "Wrong distance. Difference: "
143
              << std::abs(bfs_test.dist(v) - bfs_test.dist(u)
144
                          - 1));
156
              << std::abs(bfs_test.dist(v) - bfs_test.dist(u) - 1));
145 157
      }
... ...
@@ -147,2 +159,7 @@
147 159
  }
160

	
161
  {
162
    NullMap<Node,Arc> myPredMap;
163
    bfs(G).predMap(myPredMap).run(s);
164
  }
148 165
}
Ignore white space 6 line context
... ...
@@ -22,3 +22,2 @@
22 22
#include <lemon/lgf_reader.h>
23

	
24 23
#include <lemon/dfs.h>
... ...
@@ -90,7 +89,9 @@
90 89
  Digraph g;
91
  dfs(g,Node()).run();
92
  dfs(g).source(Node()).run();
90
  bool b;
91
  dfs(g).run(Node());
92
  b=dfs(g).run(Node(),Node());
93
  dfs(g).run();
93 94
  dfs(g)
94
    .predMap(concepts::WriteMap<Node,Arc>())
95
    .distMap(concepts::WriteMap<Node,VType>())
95
    .predMap(concepts::ReadWriteMap<Node,Arc>())
96
    .distMap(concepts::ReadWriteMap<Node,VType>())
96 97
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
... ...
@@ -98,2 +99,16 @@
98 99
    .run(Node());
100
  b=dfs(g)
101
    .predMap(concepts::ReadWriteMap<Node,Arc>())
102
    .distMap(concepts::ReadWriteMap<Node,VType>())
103
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
104
    .processedMap(concepts::WriteMap<Node,bool>())
105
    .path(concepts::Path<Digraph>())
106
    .dist(VType())
107
    .run(Node(),Node());
108
  dfs(g)
109
    .predMap(concepts::ReadWriteMap<Node,Arc>())
110
    .distMap(concepts::ReadWriteMap<Node,VType>())
111
    .reachedMap(concepts::ReadWriteMap<Node,bool>())
112
    .processedMap(concepts::WriteMap<Node,bool>())
113
    .run();
99 114
}
... ...
@@ -131,3 +146,3 @@
131 146
              "Wrong distance. (" << dfs_test.dist(u) << "->"
132
              <<dfs_test.dist(v) << ')');
147
              << dfs_test.dist(v) << ")");
133 148
      }
... ...
@@ -135,2 +150,7 @@
135 150
  }
151

	
152
  {
153
    NullMap<Node,Arc> myPredMap;
154
    dfs(G).predMap(myPredMap).run(s);
155
  }
136 156
}
Ignore white space 6 line context
... ...
@@ -22,3 +22,2 @@
22 22
#include <lemon/lgf_reader.h>
23

	
24 23
#include <lemon/dijkstra.h>
... ...
@@ -66,3 +65,2 @@
66 65
  DType::PredMap p(G);
67
  //  DType::PredNodeMap pn(G);
68 66
  LengthMap length;
... ...
@@ -78,3 +76,2 @@
78 76
  p  = dijkstra_test.predMap();
79
  //  pn = dijkstra_test.predNodeMap();
80 77
  b  = dijkstra_test.reached(n);
... ...
@@ -93,8 +90,17 @@
93 90
  Digraph g;
94
  dijkstra(g,LengthMap(),Node()).run();
95
  dijkstra(g,LengthMap()).source(Node()).run();
91
  bool b;
92
  dijkstra(g,LengthMap()).run(Node());
93
  b=dijkstra(g,LengthMap()).run(Node(),Node());
96 94
  dijkstra(g,LengthMap())
97
    .predMap(concepts::WriteMap<Node,Arc>())
98
    .distMap(concepts::WriteMap<Node,VType>())
95
    .predMap(concepts::ReadWriteMap<Node,Arc>())
96
    .distMap(concepts::ReadWriteMap<Node,VType>())
97
    .processedMap(concepts::WriteMap<Node,bool>())
99 98
    .run(Node());
99
  b=dijkstra(g,LengthMap())
100
    .predMap(concepts::ReadWriteMap<Node,Arc>())
101
    .distMap(concepts::ReadWriteMap<Node,VType>())
102
    .processedMap(concepts::WriteMap<Node,bool>())
103
    .path(concepts::Path<Digraph>())
104
    .dist(VType())
105
    .run(Node(),Node());
100 106
}
... ...
@@ -124,3 +130,3 @@
124 130
  Path<Digraph> p = dijkstra_test.path(t);
125
  check(p.length()==3,"getPath() found a wrong path.");
131
  check(p.length()==3,"path() found a wrong path.");
126 132
  check(checkPath(G, p),"path() found a wrong path.");
... ...
@@ -134,3 +140,3 @@
134 140
           (dijkstra_test.dist(v) - dijkstra_test.dist(u) <= length[e]),
135
           "dist(target)-dist(source)-arc_length= " <<
141
           "Wrong output. dist(target)-dist(source)-arc_length=" <<
136 142
           dijkstra_test.dist(v) - dijkstra_test.dist(u) - length[e]);
0 comments (0 inline)