0
4
0
... | ... |
@@ -30,79 +30,78 @@ |
30 | 30 |
#include <lemon/maps.h> |
31 | 31 |
#include <lemon/path.h> |
32 | 32 |
|
33 | 33 |
namespace lemon { |
34 | 34 |
|
35 | 35 |
///Default traits class of Bfs class. |
36 | 36 |
|
37 | 37 |
///Default traits class of Bfs class. |
38 | 38 |
///\tparam GR Digraph type. |
39 | 39 |
template<class GR> |
40 | 40 |
struct BfsDefaultTraits |
41 | 41 |
{ |
42 | 42 |
///The type of the digraph the algorithm runs on. |
43 | 43 |
typedef GR Digraph; |
44 | 44 |
|
45 | 45 |
///\brief The type of the map that stores the predecessor |
46 | 46 |
///arcs of the shortest paths. |
47 | 47 |
/// |
48 | 48 |
///The type of the map that stores the predecessor |
49 | 49 |
///arcs of the shortest paths. |
50 | 50 |
///It must meet the \ref concepts::WriteMap "WriteMap" concept. |
51 | 51 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
52 | 52 |
///Instantiates a PredMap. |
53 | 53 |
|
54 |
///This function instantiates a PredMap. |
|
54 |
///This function instantiates a PredMap. |
|
55 | 55 |
///\param g is the digraph, to which we would like to define the |
56 | 56 |
///PredMap. |
57 | 57 |
static PredMap *createPredMap(const Digraph &g) |
58 | 58 |
{ |
59 | 59 |
return new PredMap(g); |
60 | 60 |
} |
61 | 61 |
|
62 | 62 |
///The type of the map that indicates which nodes are processed. |
63 | 63 |
|
64 | 64 |
///The type of the map that indicates which nodes are processed. |
65 | 65 |
///It must meet the \ref concepts::WriteMap "WriteMap" concept. |
66 | 66 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
67 | 67 |
///Instantiates a ProcessedMap. |
68 | 68 |
|
69 | 69 |
///This function instantiates a ProcessedMap. |
70 | 70 |
///\param g is the digraph, to which |
71 | 71 |
///we would like to define the ProcessedMap |
72 | 72 |
#ifdef DOXYGEN |
73 | 73 |
static ProcessedMap *createProcessedMap(const Digraph &g) |
74 | 74 |
#else |
75 | 75 |
static ProcessedMap *createProcessedMap(const Digraph &) |
76 | 76 |
#endif |
77 | 77 |
{ |
78 | 78 |
return new ProcessedMap(); |
79 | 79 |
} |
80 | 80 |
|
81 | 81 |
///The type of the map that indicates which nodes are reached. |
82 | 82 |
|
83 |
///The type of the map that indicates which nodes are reached. |
|
84 |
///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
83 |
///The type of the map that indicates which nodes are reached.///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
85 | 84 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
86 | 85 |
///Instantiates a ReachedMap. |
87 | 86 |
|
88 | 87 |
///This function instantiates a ReachedMap. |
89 | 88 |
///\param g is the digraph, to which |
90 | 89 |
///we would like to define the ReachedMap. |
91 | 90 |
static ReachedMap *createReachedMap(const Digraph &g) |
92 | 91 |
{ |
93 | 92 |
return new ReachedMap(g); |
94 | 93 |
} |
95 | 94 |
|
96 | 95 |
///The type of the map that stores the distances of the nodes. |
97 | 96 |
|
98 | 97 |
///The type of the map that stores the distances of the nodes. |
99 | 98 |
///It must meet the \ref concepts::WriteMap "WriteMap" concept. |
100 | 99 |
typedef typename Digraph::template NodeMap<int> DistMap; |
101 | 100 |
///Instantiates a DistMap. |
102 | 101 |
|
103 | 102 |
///This function instantiates a DistMap. |
104 | 103 |
///\param g is the digraph, to which we would like to define the |
105 | 104 |
///DistMap. |
106 | 105 |
static DistMap *createDistMap(const Digraph &g) |
107 | 106 |
{ |
108 | 107 |
return new DistMap(g); |
... | ... |
@@ -819,50 +819,50 @@ |
819 | 819 |
|
820 | 820 |
class Edge { |
821 | 821 |
friend class ListGraphBase; |
822 | 822 |
protected: |
823 | 823 |
|
824 | 824 |
int id; |
825 | 825 |
explicit Edge(int pid) { id = pid;} |
826 | 826 |
|
827 | 827 |
public: |
828 | 828 |
Edge() {} |
829 | 829 |
Edge (Invalid) { id = -1; } |
830 | 830 |
bool operator==(const Edge& edge) const {return id == edge.id;} |
831 | 831 |
bool operator!=(const Edge& edge) const {return id != edge.id;} |
832 | 832 |
bool operator<(const Edge& edge) const {return id < edge.id;} |
833 | 833 |
}; |
834 | 834 |
|
835 | 835 |
class Arc { |
836 | 836 |
friend class ListGraphBase; |
837 | 837 |
protected: |
838 | 838 |
|
839 | 839 |
int id; |
840 | 840 |
explicit Arc(int pid) { id = pid;} |
841 | 841 |
|
842 | 842 |
public: |
843 |
operator Edge() const { |
|
844 |
return id != -1 ? edgeFromId(id / 2) : INVALID; |
|
843 |
operator Edge() const { |
|
844 |
return id != -1 ? edgeFromId(id / 2) : INVALID; |
|
845 | 845 |
} |
846 | 846 |
|
847 | 847 |
Arc() {} |
848 | 848 |
Arc (Invalid) { id = -1; } |
849 | 849 |
bool operator==(const Arc& arc) const {return id == arc.id;} |
850 | 850 |
bool operator!=(const Arc& arc) const {return id != arc.id;} |
851 | 851 |
bool operator<(const Arc& arc) const {return id < arc.id;} |
852 | 852 |
}; |
853 | 853 |
|
854 | 854 |
|
855 | 855 |
|
856 | 856 |
ListGraphBase() |
857 | 857 |
: nodes(), first_node(-1), |
858 | 858 |
first_free_node(-1), arcs(), first_free_arc(-1) {} |
859 | 859 |
|
860 | 860 |
|
861 | 861 |
int maxNodeId() const { return nodes.size()-1; } |
862 | 862 |
int maxEdgeId() const { return arcs.size() / 2 - 1; } |
863 | 863 |
int maxArcId() const { return arcs.size()-1; } |
864 | 864 |
|
865 | 865 |
Node source(Arc e) const { return Node(arcs[e.id ^ 1].target); } |
866 | 866 |
Node target(Arc e) const { return Node(arcs[e.id].target); } |
867 | 867 |
|
868 | 868 |
Node u(Edge e) const { return Node(arcs[2 * e.id].target); } |
... | ... |
@@ -443,50 +443,50 @@ |
443 | 443 |
|
444 | 444 |
class Edge { |
445 | 445 |
friend class SmartGraphBase; |
446 | 446 |
protected: |
447 | 447 |
|
448 | 448 |
int _id; |
449 | 449 |
explicit Edge(int id) { _id = id;} |
450 | 450 |
|
451 | 451 |
public: |
452 | 452 |
Edge() {} |
453 | 453 |
Edge (Invalid) { _id = -1; } |
454 | 454 |
bool operator==(const Edge& arc) const {return _id == arc._id;} |
455 | 455 |
bool operator!=(const Edge& arc) const {return _id != arc._id;} |
456 | 456 |
bool operator<(const Edge& arc) const {return _id < arc._id;} |
457 | 457 |
}; |
458 | 458 |
|
459 | 459 |
class Arc { |
460 | 460 |
friend class SmartGraphBase; |
461 | 461 |
protected: |
462 | 462 |
|
463 | 463 |
int _id; |
464 | 464 |
explicit Arc(int id) { _id = id;} |
465 | 465 |
|
466 | 466 |
public: |
467 |
operator Edge() const { |
|
468 |
return _id != -1 ? edgeFromId(_id / 2) : INVALID; |
|
467 |
operator Edge() const { |
|
468 |
return _id != -1 ? edgeFromId(_id / 2) : INVALID; |
|
469 | 469 |
} |
470 | 470 |
|
471 | 471 |
Arc() {} |
472 | 472 |
Arc (Invalid) { _id = -1; } |
473 | 473 |
bool operator==(const Arc& arc) const {return _id == arc._id;} |
474 | 474 |
bool operator!=(const Arc& arc) const {return _id != arc._id;} |
475 | 475 |
bool operator<(const Arc& arc) const {return _id < arc._id;} |
476 | 476 |
}; |
477 | 477 |
|
478 | 478 |
|
479 | 479 |
|
480 | 480 |
SmartGraphBase() |
481 | 481 |
: nodes(), arcs() {} |
482 | 482 |
|
483 | 483 |
|
484 | 484 |
int maxNodeId() const { return nodes.size()-1; } |
485 | 485 |
int maxEdgeId() const { return arcs.size() / 2 - 1; } |
486 | 486 |
int maxArcId() const { return arcs.size()-1; } |
487 | 487 |
|
488 | 488 |
Node source(Arc e) const { return Node(arcs[e._id ^ 1].target); } |
489 | 489 |
Node target(Arc e) const { return Node(arcs[e._id].target); } |
490 | 490 |
|
491 | 491 |
Node u(Edge e) const { return Node(arcs[2 * e._id].target); } |
492 | 492 |
Node v(Edge e) const { return Node(arcs[2 * e._id + 1].target); } |
... | ... |
@@ -67,55 +67,66 @@ |
67 | 67 |
echo $CHANGED_FILES out of $TOTAL_FILES files has been changed. |
68 | 68 |
echo $WARNED_FILES out of $TOTAL_FILES files has been warned. |
69 | 69 |
} |
70 | 70 |
|
71 | 71 |
function update_begin() { |
72 | 72 |
((TOTAL_FILES++)) |
73 | 73 |
CHANGED=NO |
74 | 74 |
WARNED=NO |
75 | 75 |
} |
76 | 76 |
|
77 | 77 |
function update_end() { |
78 | 78 |
if [ $CHANGED == YES ] |
79 | 79 |
then |
80 | 80 |
((++CHANGED_FILES)) |
81 | 81 |
fi |
82 | 82 |
if [ $WARNED == YES ] |
83 | 83 |
then |
84 | 84 |
((++WARNED_FILES)) |
85 | 85 |
fi |
86 | 86 |
} |
87 | 87 |
|
88 | 88 |
function check_action() { |
89 | 89 |
if ! diff -q $1 $2 >/dev/null |
90 | 90 |
then |
91 |
echo |
|
91 |
echo |
|
92 |
echo -n " $3 failed at line(s): " |
|
93 |
echo -n $(diff $1 $2 | grep '^[0-9]' | sed "s/^\(.*\)c.*$/ \1/g" | |
|
94 |
sed "s/,/-/g" | paste -s -d',') |
|
92 | 95 |
FAILED=YES |
93 | 96 |
fi |
94 | 97 |
} |
95 | 98 |
|
96 | 99 |
function check_warning() { |
97 |
echo |
|
100 |
echo |
|
101 |
if [ "$2" == 'long lines' ] |
|
102 |
then |
|
103 |
echo -n " $2 warning at line(s): " |
|
104 |
echo -n $(grep -n -E '.{81,}' $1 | sed "s/^\([0-9]*\)/ \1\t/g" | |
|
105 |
cut -f 1 | paste -s -d',') |
|
106 |
else |
|
107 |
echo -n " $2 warning" |
|
108 |
fi |
|
98 | 109 |
WARNED=YES |
99 | 110 |
} |
100 | 111 |
|
101 | 112 |
function check_init() { |
102 | 113 |
echo Check source files... |
103 | 114 |
FAILED_FILES=0 |
104 | 115 |
WARNED_FILES=0 |
105 | 116 |
TOTAL_FILES=0 |
106 | 117 |
} |
107 | 118 |
|
108 | 119 |
function check_done() { |
109 | 120 |
echo $FAILED_FILES out of $TOTAL_FILES files has been failed. |
110 | 121 |
echo $WARNED_FILES out of $TOTAL_FILES files has been warned. |
111 | 122 |
|
112 | 123 |
if [ $FAILED_FILES -gt 0 ] |
113 | 124 |
then |
114 | 125 |
return 1 |
115 | 126 |
elif [ $WARNED_FILES -gt 0 ] |
116 | 127 |
then |
117 | 128 |
if [ "$WARNING" == 'INTERACTIVE' ] |
118 | 129 |
then |
119 | 130 |
echo -n "Assume as normal behaviour? (yes/no) " |
120 | 131 |
while read answer |
121 | 132 |
do |
0 comments (0 inline)