有向路径检查

来源:互联网 发布:网络没sei了什么意思 编辑:程序博客网 时间:2024/06/11 17:05

题目描述

对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b,请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。

算法:
广度优先遍历。因为是有向图,所以以a开头遍历一次,以b开头遍历一次。
遍历的过程中如果找到了另一个结点,说明有路径,如果遍历结束后扔没有找到,则没有路径

struct UndirectedGraphNode {    int label;    vector<struct UndirectedGraphNode *> neighbors;    UndirectedGraphNode(int x) : label(x) {}};class Path {public:    bool checkroute(UndirectedGraphNode *a,UndirectedGraphNode* b){        if(a == NULL || b == NULL)            return false;        if(a == b)            return true;        queue<UndirectedGraphNode*> q;        q.push(a);        a->label = -1;        while (!q.empty()){            UndirectedGraphNode* now = q.front();            q.pop();            vector<UndirectedGraphNode*> nh = now->neighbors;            vector<UndirectedGraphNode*> :: iterator lt;            for (lt = nh.begin();lt != nh.end();lt++){                if(*lt == b)                    return true;                //把没有访问过的结点继续放入队列                UndirectedGraphNode* p = *lt;                if(p->label != -1){                    q.push(p);                    p->label = -1;                }            }        }        return false;    }    bool checkPath(UndirectedGraphNode* a, UndirectedGraphNode* b) {        // write code here        return checkroute(a,b) || checkroute(b,a);    }};
0 0
原创粉丝点击