Given a directed graph, design an algorithm to find out whether there is a route between two nodes.
#include <list>
#include <stack>#include <iostream>
using namespace std;
enum State {unvisited, visited, visiting };
struct GraphNode
{
int value;
State state;
list<int> neibors;
};
class Graph
{
private:
GraphNode * nodes;
int numNodes;
public:
Graph(int num)
{
numNodes = num;
nodes = new GraphNode[numNodes];
}
void addDirectPath(int n1, int n2)
{
nodes[n1].neibors.push_back(n2);
}
void deleteDirectPath(int n1, int n2)
{
nodes[n1].neibors.remove(n2);
}
bool search(int n1, int n2)
{
stack<int> s;
s.push(n1);
while (s.empty() == false)
{
int n = s.top();
s.pop();
GraphNode node = nodes[n];
node.state = visited;
list<int>::iterator i;
for (i = node.neibors.begin(); i != node.neibors.end(); i++)
{
if (nodes[*i].state == unvisited)
{
if (*i == n2)
return true;
s.push(*i);
}
}
}
return false;
}
};
int main()
{
Graph g(5);
g.addDirectPath(0, 1);
g.addDirectPath(1, 3);
cout<<g.search(0, 2)<<endl;
cout<<g.search(0, 3)<<endl;
}