广度搜索(degree)

  1. struct GraphNode{
  2. int label;
  3. vector<GraphNode*> neighbours;
  4. GraphNode(int x):label(x){};
  5. };
  6. class Solution {
  7. public:
  8. bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
  9. vector<GraphNode*> graph;
  10. vector<int> degree;
  11. for(int i = 0 ; i < numCourses;i++){
  12. graph.push_back(new GraphNode(i));
  13. degree.push_back(0);
  14. }
  15. queue<GraphNode*> Q;
  16. for(int i = 0 ;i < prerequisites.size();i++){
  17. GraphNode* first = graph[prerequisites[i][0]];
  18. GraphNode* second = graph[prerequisites[i][1]];
  19. second->neighbours.push_back(first);
  20. degree[prerequisites[i][0]]++;
  21. }
  22. for(int i = 0 ;i < numCourses;i++){
  23. if(degree[i] == 0) Q.push(graph[i]);
  24. }
  25. while(!Q.empty()){
  26. for(int i = 0 ; i < Q.front()->neighbours.size();i++){
  27. degree[Q.front()->neighbours[i]->label]--;
  28. if(degree[Q.front()->neighbours[i]->label] == 0){
  29. Q.push(Q.front()->neighbours[i]);
  30. }
  31. }
  32. Q.pop();
  33. }
  34. for(int i = 0 ; i < numCourses;i++){
  35. delete graph[i];
  36. }
  37. for(int i = 0 ;i < numCourses;i++){
  38. if(degree[i]) return false;
  39. }
  40. return true;
  41. }
  42. };

深度搜索

  1. struct GraphNode{
  2. int label;
  3. vector<GraphNode*> neighbours;
  4. GraphNode(int x):label(x){};
  5. };
  6. class Solution {
  7. public:
  8. bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
  9. vector<GraphNode*> graph;
  10. vector<int> visit;
  11. for(int i = 0 ;i<numCourses;i++){
  12. graph.push_back(new GraphNode(i));
  13. visit.push_back(-1);
  14. }
  15. for(int i = 0; i < prerequisites.size();i++){
  16. graph[prerequisites[i][1]]->neighbours.push_back( graph[prerequisites[i][0]]);
  17. }
  18. for (int i = 0 ; i < numCourses;i++){
  19. if(visit[i] == -1 && DFS_graph(graph[i],visit) == false) return false ;
  20. }
  21. for(int i = 0 ;i < numCourses;i++){
  22. delete graph[i];
  23. }
  24. return true;
  25. }
  26. bool DFS_graph(GraphNode* node,vector<int>& visit){
  27. visit[node->label] = 0;
  28. for (int i = 0 ; i < node->neighbours.size();i++){
  29. if(visit[node->neighbours[i]->label] == -1){
  30. if(DFS_graph(node->neighbours[i],visit) == false){
  31. return false;
  32. }
  33. }
  34. else if(visit[node->neighbours[i]->label] == 0) return false;
  35. }
  36. visit[node->label] = 1;
  37. return true;
  38. }
  39. };

Leetcode 课程表 C++ 图的深度搜索和广度搜索练习的更多相关文章

  1. 重新整理数据结构与算法(c#)—— 图的深度遍历和广度遍历[十一]

    参考网址:https://www.cnblogs.com/aoximin/p/13162635.html 前言 简介图: 在数据的逻辑结构D=(KR)中,如果K中结点对于关系R的前趋和后继的个数不加限 ...

  2. AlphaGo论文的译文,用深度神经网络和树搜索征服围棋:Mastering the game of Go with deep neural networks and tree search

    转载请声明 http://blog.csdn.net/u013390476/article/details/50925347 前言: 围棋的英文是 the game of Go,标题翻译为:<用 ...

  3. SDUT 2107 图的深度遍历

    图的深度遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 请定一个无向图,顶点编号从0到 ...

  4. 数据结构之 图论---图的深度遍历( 输出dfs的先后遍历序列 )

    图的深度遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出.遍历时,先遍历节点编 ...

  5. 数据结构实验之图论二:图的深度遍历(SDUT 2107)(简单DFS)

    题解:图的深度遍历就是顺着一个最初的结点开始,把与它相邻的结点都找到,也就是一直往下搜索直到尽头,然后在顺次找其他的结点. #include <bits/stdc++.h> using n ...

  6. SDUT-2107_图的深度遍历

    数据结构实验之图论二:图的深度遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定一个无向图,顶点编号从0到n-1 ...

  7. LeetCode:二叉搜索树中的搜索【700】

    LeetCode:二叉搜索树中的搜索[700] 题目描述 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 N ...

  8. 图的深度遍历(C语言)邻接矩阵表示

    知识讲解: 图的遍历分为两种,深度遍历与广度遍历.这里讨论深度遍历. 以上图为例讨论图(图片来自<算法笔记>)的深度遍历: 设图形的顶点数为n. 先从顶点v0开始,用一个数组vis[n]来 ...

  9. Java实现 LeetCode 700 二叉搜索树中的搜索(遍历树)

    700. 二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜 ...

随机推荐

  1. 关于panic ,主协程的recover 是无法获取 子协程的panic 的

    一.子协程的panic,只能在子协程中处理 下面的代码,main 函数 无法获取panic package main import ( "fmt" "time" ...

  2. YbtOJ#463-序列划分【二分答案,线段树,dp】

    正题 题目链接:https://www.ybtoj.com.cn/problem/463 题目大意 给出长度为\(n\)的序列\(A,B\).要求划分成若干段满足 对于任何\(i<j\),若\( ...

  3. 关于Postman你必须学会的技能

    关于Postman 工欲善其事,必先利其器,在了解了接口测试之后,就要选择一款适用的工具.之所以选择postman是因为它简单.容易上手.能覆盖大多数HTTP接口测试场景,性价比极高. Postman ...

  4. openEuler 20.03/21.03 - 华为欧拉开源版(CentOS 8 华为版开源版)下载

    开始 openEuler 之旅吧 openEuler 通过社区合作,打造创新平台,构建支持多处理架构.统一和开放的操作系统,推动软硬件应用生态繁荣发展. 好玩的活动停不下来 openEuler 社区不 ...

  5. NOIP 模拟五 考试总结

    T1string T1开的不错,看到这个题很激动,类似与HEOI2016排序,好像还要更简单一些,于是迅速冲了个桶排.因为洛谷上排序那道题是用桶排水的,所以我觉得没必要打线段树了,极端大数据20秒冲过 ...

  6. 详解package-lock.json的作用

    目录 详解package-lock.json package-lock.json的作用 版本号的定义规则与前缀对安装的影响 改动package.json后依旧能改变项目依赖的版本 当前项目的真实版本号 ...

  7. Appium iOS 原理

    一.iOS Appium 原理 1.1 iOS 9.3 系统之前自动化测试 1.1.1 Native 自动化 这是 iOS 9.3 系统之前自动化测试的架构模式.通过 Android Appium 原 ...

  8. 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)

    1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...

  9. 每日一题,是否存在(c语言)

    每日一题:1.是否存在 是否存在描述猫咪非常喜欢饼干,尤其是字母饼干.现在,她得到一些字母饼干,她希望选择他们中的一些拼写某些单词. 你的任务是确定她是否可以拼出自己想要的单词. 输入输入包含若干测试 ...

  10. HTTP请求如何带参

    这两天正好作一份API的接口文档,关于HTTP request如何传递参数不是很清楚,这里转载了他人的文档,让我明白了很多.. http://tomfish88.iteye.com/category/ ...