void Graph::addEdge(int v1, int v2) { VertexIterator iter = vertices.find(v1); if (iter != vertices.end()) { Edge edge(v2); iter->second.adjList.push_back(edge); } iter = vertices.find(v2); iter->second.indegree++; }
bool Graph::visit(int v, std::list<int> & sortedList) { VertexIterator iter = vertices.find(v); if (iter != vertices.end()) { if (iter->second.visited == false) { iter->second.visited = true; std::list<Edge>::const_iterator liter = iter->second.adjList.begin(); for (; liter != iter->second.adjList.end(); ++liter) { if (!visit(liter->dest, sortedList)) { return false; } } sortedList.push_front(iter->first); } else { return false; } } return true; }
void Graph::BreadthFirstTour(int v) { cout << "BFS BEGIN\n"; std::queue<int> q; VertexConstIterator iter = vertices.find(v); if (iter != vertices.end()) { q.push(iter->first); } else { cout << "BFS END\n"; return; } VertexIterator iter1; while (!q.empty()) { int vtx = q.front(); q.pop(); Vertex & v = vertices[vtx]; if (v.visited == false ) { v.visited = true; cout << v.orig << " "; std::list<Edge>::const_iterator iter = v.adjList.begin(); while (iter != v.adjList.end()) { //cout << "dest " << iter->dest << endl; VertexConstIterator citer = vertices.find(iter->dest); if (citer != vertices.end()) { q.push(citer->first); //cout << "pushing " << citer->orig << endl; } ++iter; } } } cout << "\nBFS END" << endl; resetStates(); }
void IConnectionLoader::addConnection( VertexMap& vertices, SystemTypeGetter* info, int from, int to, TypeSet tags) { TypeSet toType, fromType; toType.insert(info->getType(to)); toType.insert(tags.begin(), tags.end()); fromType.insert(info->getType(from)); fromType.insert(tags.begin(), tags.end()); //Add vertices if they dont exists already //this will fail if it already exists vertices.insert(std::make_pair(from, Vertex(from))); vertices.insert(std::make_pair(to, Vertex(to))); //Add edges to the vertices vertices.find(from)->second.addEdge(to, toType); vertices.find(to)->second.addEdge(from, fromType); }
std::vector<Vertex> ConstructPath( VertexMap& aFrom, const Vertex& aCurrentNode) { VertexMap::iterator i = aFrom.find(aCurrentNode); if( i != aFrom.end() ) { std::vector<Vertex> path = ConstructPath(aFrom,(*i).second); path.push_back(aCurrentNode); return path; }else { std::vector<Vertex> path; path.push_back(aCurrentNode); return path; } }
void Graph::DepthFirstTour(int v) { VertexIterator iter = vertices.find(v); if (iter != vertices.end()) { if (iter->second.visited == false) { iter->second.visited = true; std::list<Edge>::iterator liter = iter->second.adjList.begin(); for (; liter != iter->second.adjList.end(); ++liter) { DepthFirstTour(liter->dest); } cout << iter->second.orig << " "; } } }