/* Name: graph_scanning.cxx Author: Leo Liberti Purpose: graph scanning algorithms: main Source: C++ implementation History: 110124 */ #include #include #include #include #include #include #include #include #include "graph_scanning.h" template void initialize(std::map& m, std::set& k, U v) { using namespace std; m.erase(m.begin(), m.end()); typename set::iterator sit = k.begin(); while(sit != k.end()) { m[*sit] = v; sit++; } } int main(int argc, char** argv) { using namespace std; if (argc < 4) { cerr << argv[0] << ": error: syntax is " << argv[0] << " cmd file node [arg]" << endl; cerr << " cmd in {print, dfs, scan}" << endl; cerr << " file describes a directed graph in .gph format" << endl; cerr << " node is the source node (integer in [0, ..., n-1])" << endl; cerr << " arg is traversal order for graph scanning:" << endl; cerr << " 1=prenode, 2=prearc, 3=postarc, 4=postnode" << endl; exit(1); } // parse cmd line args string cmd = argv[1]; ifstream inFile(argv[2]); int node = atoi(argv[3]); int method = 0; if (argc == 5) { method = atoi(argv[4]); } Graph g; g.fromFile(inFile); inFile.close(); string spaces = ""; map visited; initialize(visited, g.getNodeSet(), false); if (cmd == "print") { g.print(); } else if (cmd == "dfs") { g.dfs(node, visited, spaces, 1); } else if (cmd == "scan") { g.dfs(node, visited, spaces, method); } }