给出一张有向图,设计一个算法判断两个点 s
与 t
之间是否存在路线。
样例
如下图:
A----->B----->C
\ |
\ |
\ |
\ v
->D----->E
for s = B
and t = E
, return true
for s = D
and t = C
, return false
/**
* Definition for Directed graph.
* struct DirectedGraphNode {
* int label;
* vector<DirectedGraphNode *> neighbors;
* DirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
/**
* @param graph: A list of Directed graph node
* @param s: the starting Directed graph node
* @param t: the terminal Directed graph node
* @return: a boolean value
*/
bool hasRoute(vector<DirectedGraphNode*> graph,
DirectedGraphNode* s, DirectedGraphNode* t) {
// write your code here
vector<DirectedGraphNode*> buf;
bool result = false;
visit(s, t, buf, result);
return result;
}
private:
void visit(DirectedGraphNode *s, DirectedGraphNode *t,
vector<DirectedGraphNode*> &buf, bool &result)
{
if (result)
{
return;
}
if (find(buf.begin(), buf.end(), s) != buf.end())
{
return;
}
if (s == t)
{
result = true;
return;
}
buf.push_back(s);
for (int i = 0; i < s->neighbors.size(); i++)
{
visit(s->neighbors[i], t, buf, result);
if (result)
{
break;
}
}
}
};