#include #include #include // Graph nodes are labeled by ints. typedef int node; // For node i, graph[i] is a list of the neighbors of i; typedef std::map > graph; void setAdjacent(node i, node j, graph& g) { g[i].push_back(j); // if the graph is undirected g[j].push_back(i); } bool isMember(node i, std::list L) { return std::find(L.begin(), L.end(), i) != L.end(); } bool areAdjacent(node i, node j, graph g) { return isMember(i, g[j]); } #include void write(std::ostream& out, const std::list L){ std::list::const_iterator p; bool first_time = true; out << "["; for (p = L.begin(); p != L.end(); ++p) { if (first_time) first_time = false; else out << ", "; out << *p; } out << "]"; } void write(std::ostream& out, const graph g){ graph::const_iterator p; for (p = g.begin(); p != g.end(); ++p) { out << p->first << ": "; write(out, p->second); out << std::endl; } }