void Graph::TopologicalSort() { VertexConstIterator iter = vertices.begin(); std::list<int> sortedList; bool cycle = false; for (; iter != vertices.end(); ++iter) { if (iter->second.indegree == 0) { if (!visit(iter->first, sortedList)) { cycle = true; break; } } } if (cycle || sortedList.size() != vertices.size()) { cout << "CYCLE"; return; } std::list<int>::const_iterator liter = sortedList.begin(); for (; liter != sortedList.end(); ++liter) { cout << *liter << " "; } }
void Graph::print() { VertexConstIterator iter = vertices.begin(); for (; iter != vertices.end(); ++iter) { cout << iter->second << "\n"; } }
void Graph::resetStates() { VertexIterator iter = vertices.begin(); for (; iter != vertices.end(); ++iter) { iter->second.visited = false; } }