43 std::set <int> visited;
45 std::vector <int> filament;
46 std::set <int> unvisited;
47 std::set <int> adjacentNodes;
50 for (Graph::MapNodesById::const_iterator itNodes = G->
GetNodes().begin();
54 unvisited.insert (itNodes->first);
57 while (unvisited.size() > 0)
60 for (std::set<int>::const_iterator itAN = unvisited.begin();
61 itAN != unvisited.end();
72 visited.insert(N->
Id());
73 unvisited.erase(unvisited.find(N->
Id()));
75 adjacentNodes.clear();
77 for (std::set<int>::const_iterator itAN = adjacentNodes.begin();
78 itAN != adjacentNodes.end();
81 if ( visited.find (*itAN) == visited.end() )
88 filament.push_back (N->
Id());
90 while (next.size() > 0)
92 N = G->
GetNode(*(next.begin()));
93 visited.insert(N->
Id());
94 unvisited.erase(unvisited.find(N->
Id()));
95 adjacentNodes.clear();
97 filament.push_back (N->
Id());
100 for (std::set<int>::const_iterator itAN = adjacentNodes.begin();
101 itAN != adjacentNodes.end();
104 if ( visited.find (*itAN) == visited.end() )
106 int count_filament_adjacency = 0;
107 std::vector<int>::const_iterator it_fil = filament.begin();
108 bool is_adjacent_to_start=
false;
109 bool is_adjacent_to_end=
false;
112 it_fil = filament.begin();
117 it_fil = filament.end();
122 for ( it_fil = filament.begin();
123 it_fil != filament.end(); it_fil++)
127 count_filament_adjacency++;
129 it_fil = filament.end();
131 it_fil = filament.begin();
133 bool is_not_T =
true;
134 if ( is_adjacent_to_end && is_adjacent_to_start)
137 for ( it_fil = filament.begin();
138 it_fil != filament.end(); it_fil++)
141 for ( Node::MultimapArcsById::const_iterator itArcs = fN->
IncidentArcs().begin();
145 Arc * arc = itArcs->second;
147 if ( arc->
Nodes().find(*itAN) != arc->
Nodes().end()
148 && arc->
Nodes().find(filament[0]) != arc->
Nodes().end()
149 && arc->
Nodes().find(filament[filament.size()-1]) != arc->
Nodes().end() )
158 if (count_filament_adjacency == 1 || ( is_adjacent_to_end && is_adjacent_to_start && is_not_T) )
166 __filaments.push_back(filament);