题目描述:
Given a directed graph, design an algorithm to find out whether there is a route between two nodes.
Example
题目思路:
Given graph:
A----->B----->C
\ |
\ |
\ |
\ v
->D----->E
for s = B
and t = E
, return true
for s = D
and t = C
, return false
这题我发现只能用bfs做,dfs做会超时(坑爹呀!)。bfs用简单的传统算法就好了。
Mycode(AC = 396ms):
/**
* 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
stack<DirectedGraphNode *> sgraph;
sgraph.push(s);
// bfs to search the neighbors
while (!sgraph.empty()) {
DirectedGraphNode *node = sgraph.top();
sgraph.pop();
if (node->label == t->label) return true;
for (int i = 0; i < node->neighbors.size(); i++) {
sgraph.push(node->neighbors[i]);
}
}
return false;
}
};