[CareerCup] 4.2 Route between Two Nodes in Directed Graph 有向图中两点的路径

简介:

4.2 Given a directed graph, design an algorithm to find out whether there is a route between two nodes.

LeetCode和CareerCup中关于图的题都不是很多,LeetCode中只有三道,分别是Clone Graph 无向图的复制Course Schedule 课程清单 和 Course Schedule II 课程清单之二。目前看来CareerCup中有关图的题在第四章中仅此一道,这是一道关于有向图的题,书中是用java来做的,我们用c++来做时要定义图和节点,这里参考了之前那道Clone Graph 无向图的复制中关于无向图的定义,并且在里面加入了一个枚举类变量state,来帮助我们遍历。这种找两点之间路径的题就是遍历的问题,可以用BFS或DFS来解,先来看BFS的解法,如下所示:

//Definition for directed graph.
enum State {
    Unvisited, Visited, Visiting
};
struct DirectedGraphNode {
   int label;
   State state;
   vector<DirectedGraphNode *> neighbors;
   DirectedGraphNode(int x) : label(x) {};
};
struct DirectedGraph {
    vector<DirectedGraphNode*> nodes;
};
class Solution {
public:
    bool search(DirectedGraph *g, DirectedGraphNode *start, DirectedGraphNode *end) {
        queue<DirectedGraphNode*> q;
        for (auto a : g->nodes) a->state = Unvisited;
        start->state = Visiting;
        q.push(start);
        while (!q.empty()) {
            DirectedGraphNode *node = q.front(); q.pop();
            for (auto a : node->neighbors) {
                if (a->state == Unvisited) {
                    if (a == end) return true;
                    else {
                        a->state = Visiting;
                        q.push(a);
                    }
                }
            }    
            node->state = Visited;
        }
        return false;
    }
};

本文转自博客园Grandyang的博客,原文链接:有向图中两点的路径[CareerCup] 4.2 Route between Two Nodes in Directed Graph ,如需转载请自行联系原博主。

相关文章
|
8月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
`DOM`的`Named Node Map`代表元素的属性列表,它是一个自动更新的节点集合。当属性增删时,列表随之变化。以下代码示例加载&quot;books.xml&quot;,获取第一个`&lt;book&gt;`元素的属性节点列表,`x.length`表示属性数量,`x.getNamedItem(&quot;category&quot;).nodeValue`显示&quot;category&quot;属性值,如&quot;cooking&quot;,并输出属性总数1。
|
7月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
**DOM的NamedNodeMap概括:**它表示元素的属性节点列表,如`&lt;book&gt;`的`attributes`。这个映射自动更新,添加或删除属性时响应变化。代码示例加载&quot;books.xml&quot;,获取首个`&lt;book&gt;`的属性,`x.getNamedItem(&quot;category&quot;).nodeValue`显示类别,`x.length`显示属性数。输出示例:类别为&quot;cooking&quot;,属性计数为1。
|
8月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
`DOM`中的`Named Node Map`表示元素的属性列表,它是一个自动更新的节点集合。当属性增删时,列表随之变化。例如,加载&quot;books.xml&quot;到`xmlDoc`,然后获取第一个`&lt;book&gt;`元素的属性列表:`x=xmlDoc.getElementsByTagName(&#39;book&#39;)[0].attributes`。`x.length`显示属性数量,`x.getNamedItem(&quot;category&quot;).nodeValue`返回&quot;category&quot;属性的值。
|
7月前
|
人工智能 算法 Java
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
|
分布式计算 Java Spark
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
56 0
|
存储 算法 索引
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
131 0
|
Web App开发 JavaScript 前端开发
关于 Node 和 Chrome 之间的关系|学习笔记
快速学习关于 Node 和 Chrome 之间的关系
203 0
|
Web App开发 JavaScript 前端开发
关于Node和Chrome之间的关系
一、创建基本的webpack4.x项目 二、Node支持特性