题目

  1. N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:012,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。
  2. 在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] [0,1,...,N-1] 中的一个整数表示,其中 N = rooms.length 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。
  3. 最初,除 0 号房间外的其余所有房间都被锁住。
  4. 你可以自由地在房间之间来回走动。
  5. 如果能进入每个房间返回 true,否则返回 false
  6. 示例 1
  7. 输入: [[1],[2],[3],[]]
  8. 输出: true
  9. 解释:
  10. 我们从 0 号房间开始,拿到钥匙 1
  11. 之后我们去 1 号房间,拿到钥匙 2
  12. 然后我们去 2 号房间,拿到钥匙 3
  13. 最后我们去了 3 号房间。
  14. 由于我们能够进入每个房间,我们返回 true
  15. 示例 2
  16. 输入:[[1,3],[3,0,1],[2],[0]]
  17. 输出:false
  18. 解释:我们不能进入 2 号房间。
  19. 提示:
  20. 1 <= rooms.length <= 1000
  21. 0 <= rooms[i].length <= 1000
  22. 所有房间中的钥匙数量总计不超过 3000

解析

  • 思路:有两种方式
  • 第一通过深度优先搜索的方式,到了每一个房间就判断钥匙是否存在于已经拥有的序列中,如果不在就把他设置为可以访问。
  • 第二通过广度优先搜索的方式进行探索。将可访问的0房间加入队列之中,访问队列中的一个元素,遍历他可以到达的房间,如果该房间还没有被访问,那么设置为访问,否则跳过。

  1. class Solution_841 {
  2. public:
  3. bool canVisitAllRooms(vector<vector<int>>& rooms) {
  4. queue<int> que; //队列装的是房间号
  5. int n = rooms.size();
  6. vector<bool> visit(n,false);
  7. que.push(0);
  8. visit[0] = true;
  9. while (!que.empty())
  10. {
  11. int temp = que.front(); //取出当前能到达的房间号
  12. que.pop();
  13. for (int i = 0; i < rooms[temp].size();i++) //遍历当前房间里面的能打开房间的钥匙
  14. {
  15. int next = rooms[temp][i];
  16. if (!visit[next]) //还没有被访问
  17. {
  18. visit[next] = true; //不要忘记,标记为已经访问过
  19. que.push(next);
  20. }
  21. }
  22. }
  23. for (int i = 0; i < n;i++)
  24. {
  25. if (visit[i]==false)
  26. {
  27. return false;
  28. }
  29. }
  30. return true;
  31. }
  32. };

题目来源

Leetcode-841. 钥匙和房间的更多相关文章

  1. 【LeetCode】841. 钥匙和房间

    841. 钥匙和房间 知识点:图:递归 题目描述 有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间. 在形式上, ...

  2. LeetCode 841:钥匙和房间 Keys and Rooms

    题目: ​ 有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间. ​ 在形式上,对于每个房间 i 都有一个钥匙列表 ...

  3. [LeetCode] Keys and Rooms 钥匙与房间

    There are N rooms and you start in room 0.  Each room has a distinct number in 0, 1, 2, ..., N-1, an ...

  4. [Swift]LeetCode841. 钥匙和房间 | Keys and Rooms

    There are N rooms and you start in room 0.  Each room has a distinct number in 0, 1, 2, ..., N-1, an ...

  5. LeetCode841 钥匙和房间

    有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间. 在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i ...

  6. [LeetCode] Exam Room 考试房间

    In an exam room, there are N seats in a single row, numbered 0, 1, 2, ..., N-1. When a student enter ...

  7. LeetCode 841. Keys and Rooms

    原题链接在这里:https://leetcode.com/problems/keys-and-rooms/ 题目: There are N rooms and you start in room 0. ...

  8. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  9. Leetcode Weekly Contest 86

    Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...

随机推荐

  1. Oracle中append与Nologging

    快速向表中插入大量数据Oracle中append与Nologging 2017-05-05 / VIEWS: 304 来源于:http://blog.sina.com.cn/s/blog_61cd89 ...

  2. ROS知识(23)——行为树Behavio Tree原理

    机器人的复杂行为的控制结构CA(Contrl Architecture)通常使用有限状态机来实现,例如ROS提供的smach.行为树是另外一种实现机器人控制的方法,ROS下代表的开源库有pi_tree ...

  3. java一些常用并发工具示例

    最近把<java并发编程实战>-Java Consurrency in Practice 重温了一遍,把书中提到的一些常用工具记录于此: 一.闭锁(门栓)- CountDownLatch ...

  4. bitnami-redmine邮件告警配置

    配置 bitnami-redmine的配置文件与单纯的redmine配置文件可能并不相同,在这里我们需要打开一下配置文件: /opt/bitnami/apps/redmine/htdocs/confi ...

  5. [Go] defer 语句

    Go 还有一些特有的流程控制语句,其中一个就是 defer 语句.该语句用于延迟调用指定的函数,它只能出现在函数的内部,由 defer 关键字以及针对某个函数的调用表达式组成.这里被调用的函数称为 延 ...

  6. CRM上线之路 走上了CRM实施顾问-第12天上班 -第三周

    今天是周五,<CRM初期需求说明>是经理们商讨的,总共2张纸,根据两次会议,我写了<CRM需求说明>总共18面. 这是这周的工作汇报,其实,报告是我一天内写出来的,中午饭都没吃 ...

  7. Delphi如何在Form的标题栏绘制自定义文字

    Delphi中Form窗体的标题被设计成绘制在系统菜单的旁边,如果你想要在标题栏绘制自定义文本又不想改变Caption属性,你需要处理特定的Windows消息:WM_NCPAINT.. WM_NCPA ...

  8. delphi 取上级目录

    var  S: string;begin  S := 'c:\aa\bb\cc\dd\abc.exe';  ShowMessage(ExtractFileDir(ExtractFileDir(S))) ...

  9. ES6的一些基本用法

    ● let ● variable hoisting ● arrow Function, Lambda表达式 ● Destructuring Assignments 解构赋值 ● 默认参数值 Defau ...

  10. 一个简单例子理解C#的协变和逆变

    关于协变逆变,SolidMango的解释是比较可取的.有了协变,比如,在需要返回IEnumerable<object>类型的时候,可以使用IEnmerable<string>来 ...