#include #include #include using namespace std; class Node { public: vector edges; int tmp; }; class Graph { public: vector nodes; int Shortest_Path(Node *a, Node *b); }; int Graph::Shortest_Path(Node *a, Node *b) { int i; list bfsq; list ::iterator bit; Node *n; for (i = 0; i < nodes.size(); i++) nodes[i]->tmp = -1; a->tmp = 0; bfsq.push_back(a); while (!bfsq.empty()) { bit = bfsq.begin(); n = *bit; bfsq.erase(bit); if (n == b) return n->tmp; for (i = 0; i < n->edges.size(); i++) { if (n->edges[i]->tmp == -1) { n->edges[i]->tmp = n->tmp+1; bfsq.push_back(n->edges[i]); } } } return -1; } main() { Graph g; Node *n; int i, j; for (i = 0; i < 10; i++) { n = new Node; g.nodes.push_back(n); } for (i = 0; i < 9; i++) { g.nodes[i]->edges.push_back(g.nodes[i+1]); } cout << g.Shortest_Path(g.nodes[0], g.nodes[9]) << endl; cout << g.Shortest_Path(g.nodes[9], g.nodes[0]) << endl; for (i = 0; i < 10; i++) { for (j = 0; j < i; j++) { g.nodes[i]->edges.push_back(g.nodes[j]); } } cout << g.Shortest_Path(g.nodes[0], g.nodes[9]) << endl; cout << g.Shortest_Path(g.nodes[9], g.nodes[0]) << endl; }