1. 程式人生 > >LintCode-圖中兩個點之間的路線

LintCode-圖中兩個點之間的路線

給出一張有向圖,設計一個演算法判斷兩個點 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;
    }
};