给出一张有向图,设计一个算法判断两个点 s
与 t
之间是否存在路线。
样例
如下图:
A----->B----->C
\ |
\ |
\ |
\ v
->D----->E
for s = B
and t = E
, return true
for s = D
and t = C
, return false
分析:直接BFS()即可
代码:
/**
* 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
queue<DirectedGraphNode*> q;
map<DirectedGraphNode*,bool> visited;
q.push(s);
visited[s]=true;
while(!q.empty())
{
DirectedGraphNode* cur = q.front();
q.pop();
if(cur==t)
return true;
for(auto neighbour:cur->neighbors)
{
if(!visited[neighbour])
{
q.push(neighbour);
visited[neighbour]=true;
}
}
}
return false;
}
};