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;
    }
};



阅读更多
文章标签: 面试 LintCode
个人分类: 面试
上一篇LintCode-更新二进制位
下一篇LintCode-乱序字符串
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭