1. 题目

节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。

示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]],start = 0, target = 2输出:true
示例2:输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], start = 0, target = 4输出 true提示:
节点数量n在[0, 1e5]范围内。
节点编号大于等于 0 小于 n。
图中可能存在自环和平行边。

2. 解题

  • 邻接矩阵 内存超限
class Solution {public:bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {bool visited[n] = {false};visited[start] = true;queue<int> q;int tp, i;q.push(start);vector<vector<int>> map(n,vector<int>(n,0));for(i = 0; i < graph.size(); ++i)map[graph[i][0]][graph[i][1]] = 1;while(!q.empty()){tp = q.front();q.pop();if(tp == target)return true;for(i = 0; i < n; ++i){if(!visited[i] && map[tp][i]==1){visited[i] = true;q.push(i);}}}return false;}
};
  • 邻接表 BFS
class Solution {public:bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {bool visited[n] = {false};visited[start] = true;vector<vector<int>> map(n);int i, tp;for(i = 0; i < graph.size(); ++i){map[graph[i][0]].push_back(graph[i][1]);}queue<int> q;q.push(start);while(!q.empty()){tp = q.front();if(tp == target)return true;q.pop();for(i = 0; i < map[tp].size(); ++i){if(!visited[map[tp][i]]){q.push(map[tp][i]);visited[map[tp][i]] = true;}}}return false;}
};

  • 邻接表 DFS
class Solution {public:bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {bool visited[n] = {false};visited[start] = true;vector<vector<int>> map(n);for(int i = 0; i < graph.size(); ++i){map[graph[i][0]].push_back(graph[i][1]);}bool found = false;dfs(map,start,target,found,visited);return found;}void dfs(vector<vector<int>>& map , int start, int& target, bool& found, bool* visited){if(start == target)found = true;if(found)return;for(int i = 0; i < map[start].size(); ++i){if(!visited[map[start][i]]){visited[map[start][i]] = true;dfs(map,map[start][i],target,found,visited);visited[map[start][i]] = false;}}}
};

程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)相关推荐

  1. 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)

    1. 题目 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回null. 示例 1: 输入: ...

  2. 面试题 04.01. 节点间通路

    面试题 04.01. 节点间通路 注意是有向图,用邻接表代替图,dfs或者bfs都可 class Solution { public:bool findWhetherExistsPath(int n, ...

  3. 程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**

    1. 题目 从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树. 给定一个由不同节点组成的二叉树,输出所有可能生成此树的数组. 示例: 给定如下二叉树2/ \1 3 返回: ...

  4. 程序员面试金典 - 面试题 05.01. 插入(位运算)

    1. 题目 插入.给定两个32位的整数 N 与 M,以及表示比特位置的 i 与 j. 编写一种方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束. 假定从 j 位到 i 位足 ...

  5. 程序员面试金典 - 面试题 04.12. 求和路径(二叉树递归)

    1. 题目 给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负). 设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量. 注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但 ...

  6. 程序员面试金典 - 面试题 04.10. 检查子树(双重递归)

    1. 题目 检查子树.你有两棵非常大的二叉树:T1,有几万个节点:T2,有几万个节点. 设计一个算法,判断 T2 是否为 T1 的子树. 如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 ...

  7. 程序员面试金典 - 面试题 04.05. 合法二叉搜索树(中序遍历)

    1. 题目 实现一个函数,检查一棵二叉树是否为二叉搜索树. 示例 1: 输入:2/ \1 3 输出: true示例 2: 输入:5/ \1 4/ \3 6 输出: false 解释: 输入为: [5, ...

  8. 程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)

    1. 题目 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1. 示例 1: 给定二叉树 [3,9,20,null,null,15,7]3/ ...

  9. 程序员面试金典 - 面试题 04.03. 特定深度节点链表(BFS)

    1. 题目 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表).返回一个包含所有深度的链表的数组. 例: 输入:[1,2,3,4,5, ...

最新文章

  1. 微信公众号开发的一些配置
  2. 调试JDK源码-HashSet实现原理
  3. 硬核!OSPF路由协议归纳大全~
  4. 活动助手Beta用户试用报告
  5. 多线程:三大不安全案例
  6. 《上海堡垒》改编电影发布 QQ阅读披露作者江南心声
  7. Adaboost、RandomFrest、GBRT的区别
  8. CentOS6.6下搭建vsftpd+PAM认证
  9. 一键自动下载百度美女图片
  10. 韦东山之学习笔记——NOR Flash
  11. Python3 插入排序
  12. 去追寻,趁我们还年轻。
  13. 使用小波包变换分析信号的matlab程序,使用小波包变换分析信号的MATLAB程序
  14. 关于opencv fitLine直线拟合得斜率及截距
  15. centos英文版下如何安装中文语言包
  16. ArcGIS栅格按照象元大小生成矢量的方法
  17. POJ1837 DP
  18. Google Filament 源码学习(二):Material System (一)
  19. 黑客帝国代码雨JS,支持中文
  20. qq营销软件 服务器 虚拟机,QQ营销软件哪个好

热门文章

  1. iOS各种小理论知识
  2. c++远征之模板篇——运算符重载
  3. Python 37 进程池与线程池 、 协程
  4. 解决Ubuntu下pycharm无法输入中文的问题
  5. postgresql数据库安装及简单操作
  6. 使用TFHpple解析html
  7. TotoiseSVN 使用参考文章
  8. c#将list集合转换为datatable的简单办法
  9. git命令:修改已经commit的注释
  10. MinGW与MSVC编译的区别