DFS ended up with TLE. Only BFS works.
/** * 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 bfs(DirectedGraphNode*s, DirectedGraphNode* t) { unordered_set<DirectedGraphNode*> visited; queue<DirectedGraphNode*> q; q.push(s); while(!q.empty()) { auto pt = q.front(); q.pop(); if(pt->label == t->label) return true; visited.insert(pt); for(auto c : pt->neighbors) { if(visited.find(c) == visited.end()) q.push(c); } } return false; } bool hasRoute(vector<DirectedGraphNode*> graph, DirectedGraphNode* s, DirectedGraphNode* t) { unordered_set<DirectedGraphNode*> visiteds; visiteds.insert(s); bool b1 = bfs(s, t); if(b1) return true; visiteds.clear(); visiteds.insert(t); return bfs(s, t); } };