图中两个点之间的路线

来源:互联网 发布:linux 绝对路径 编辑:程序博客网 时间:2024/04/30 16:45

给出一张有向图,设计一个算法判断两个点 s 与 t 之间是否存在路线。

样例

如下图:

A----->B----->C \     |  \    |   \   |    \  v     ->D----->E

for s = B and t = E, return true

for s = D and t = C, return false

/** * 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        vector<DirectedGraphNode*> buf;    bool result = false;    visit(s, t, buf, result);    return result;    }private:    void visit(DirectedGraphNode *s, DirectedGraphNode *t, vector<DirectedGraphNode*> &buf, bool &result)    {    if (result)    {    return;    }    if (find(buf.begin(), buf.end(), s) != buf.end())    {    return;    }    if (s == t)    {    result = true;    return;    }    buf.push_back(s);    for (int i = 0; i < s->neighbors.size(); i++)    {    visit(s->neighbors[i], t, buf, result);    if (result)    {    break;    }    }    }};


0 0