判断有向图有没有环

邻接矩阵 有向图 判断是否有环 是否连通 DFS C实现~ 通过 对DFS 搜索 修改 实现 了 根据有无(反向边)判断是否 有环 , 并且可以计算连通分量个数 并判断 是否连通。 阅读详情

这里记录一种简单(码量小)的方法。

核心思想是借助dfs/递归来实现

借助vis数组保存三种状态:

  1. vis[u]=0 该节点尚未被访问
  2. vis[u]=1 该节点正在被访问(正在当前的递归中)
  3. vis[u]=2 该节点已经完成了访问
#include <bits/stdc++.h>
using namespace std;

const int maxn = 5e3 + 10;
vector<int> g[maxn];
int vis[maxn];
bool cyc=0;//是否有环

void dfs(int v){
    vis[v]=1;//节点加入递归
    for(auto p:g[v]){
        if(vis[p]==1){//该节点在当前递归中,说明形成了环
            cyc=1;
        }else if(vis[p]==0){//没有被访问,则继续递归
            dfs(p);
        }
    }
    vis[v]=2;//节点结束递归
}

int main(){
    //...
    for(int i=1;i<=n;i++){
        if(vis[i]==0) dfs(i);
    }
    //...
}


贴一道题:https://codeforces.com/contest/1217/problem/D

判断一个有向图是否有环 Description 给出一个有向图,判断图中是否存在回路。 Input 第1行:输入图的顶点个数N(1 ≤ N≤ 2,500)和C(图的边数,1 ≤ C ≤ 6,200); 第2到C+1行中,第i+1行输入两个整数,分别表示第i条边的起点和终点的编号。 Output 如果图中存在回路,输出“YES”,否则,输出“NO”。 Sample Input 7 阅读详情

相关推荐

Python 判断 有向图 是否有环

import numpy from numpy import * def dfs( v ): vis[v] = -1 flag = 0 for i in range(n): # print (a[v][i],'---', vis[i] ) if a[v][i] != 0 and vis[i] != -1: dfs(i

Xiaoyu Mo 7206

判断有向图是否有环 、环的个数以及环中元素

判断有向图是否有环有三种方法:拓扑排序、深度遍历+回溯、深度遍历 + 判断后退边 这里使用 拓扑排序 和 深度遍历 + 回溯判断是不是环。使用 深度遍历 + 判断后退边找出环个数 以及环中元素 1、拓扑排序 思想:找入度为0的顶点,输出顶点,删除出边。循环到无顶点输出。 若:输出所有顶点,则课拓扑排序,无环;反之,则不能拓扑排序,有环 使用:可以使用拓扑排序为有向无环图每一个结点进行编号,拓扑排序输出的顺序可以为编号顺序 源代码: [cpp] view plain copy #include <io

qq_38168462的博客 9426

RK3576处理器RT-Thread与Linux混合部署实现工业EtherCAT实时控制

实时操作系统(RTOS)是工业自动化领域的核心技术,通过精确的任务调度和中断响应机制确保微秒级控制精度。RT-Thread作为开源实时系统,采用优先级抢占式调度算法,能够满足运动控制和总线通信的硬实时需求。在工业显控一体设备中,实时系统需要与富应用系统协同工作,Linux系统负责图形界面和网络通信等非实时任务。混合部署架构通过共享内存和核间通信技术实现数据交换,既保证了实时性能又扩展了应用生态。EtherCAT工业以太网协议作为高性能现场总线,采用主从站结构和分布式时钟同步,可实现多轴运动控制的精确同步。R

weixin_33738982的博客 2627

判断有向图是否有环

第一种方法:拓扑排序 对于有向图的拓扑排序,大家都知道的kahn算法: 计算图中所有点的入度,把入度为0的点加入栈 如果栈非空: 如果图中还存在顶点,则表示图中存在环;否则输出的顶点就是一个拓扑排序序列 取出栈顶顶点a,输出该顶点值,删除该顶点 从图中删除所有以a为起始点的边,如果删除的边的另一个顶点入度为0,则把它入栈 如果利用上面的拓扑排序

Stephan14的专栏 6115

蓝桥杯算法:打印图形——六芒星

【输入格式】 输入一行包含一个整数 n。 【输出格式】 输出一个六芒星,表示满足题意的图形。 【样例输入】 3 4 【样例输出】 【评测用例规模与约定】 对于所有评测用例,1 ≤ n ≤ 20。 总结: 第一次做图形题,做了蛮久,图形题有很多的方式去完成,它考验的是你能不能找到更简单的那一种方式. 我初看到这个图形,第一种想法是把这个六芒星当做六个小三角形来做,然后以某种规则排列一下,就能做出来,但是尝试了一下感觉太麻烦了。 然后我的第二种想法是,这个图形是对称图形,怎么能写出一半吗? 这样另一半想办

KeepCodeing 3835

QCPColorMap实现瀑布图

QCPColorMap实现真正的瀑布图

pf1873252141的博客 5270

有向图的几个算法分析总结

简介     前面讨论的很多文章里,都是针对无向图进行的分析。无向图的一个特性就是其中一旦两个节点a和b是相连的,这就意味着有路径从a到b,同时也有从b到a的。它具体对应的矩阵表达方式对应着一个对称矩阵。而这里重点是考察有向图。和无向图比起来,有向图更加多了一种出入度的概念。因为方向的有向性,很多以前在无向图里看起来比较简单的问题在这里会变得更加有意思。   有向图定义   一个常用的...

点缀星辰 3608

从零到一:桌面宠物的硬件架构设计与工程实践

本文详细介绍了基于STM32F103C8T6主控平台的桌面宠物机器人硬件架构设计与工程实践。内容涵盖电源管理、舵机控制、PCB布局及系统调试等核心环节,为硬件爱好者提供从零到一的完整开发指南,助力打造稳定可靠的智能桌面伴侣。

alice7model的博客 1112

哪些方法可以判断出一个有向图是否有环

使用深度优先遍历,若从有向图上的某个顶点u出发,在 DFS(u)结束之前出现一条从顶点v到u的边,由于v在生成树上是u的子孙,则图中必定存在包含u和v的环,因此深度优先遍历可以检测一个有向图是否有环。 拓扑排序时,当某顶点不为任何边的头时才能加入序列,存在环时环中的顶点一直是某条边的头 不能加入拓扑序列。也就是说,还存在无法找到下一个可以加入拓扑序列的顶点,则说明此图存在回路。 关键路径能否判断一个图有环,则存在一些争议。关键路径本身虽然不允许有环,但求家关键路径的算法本身无法判断是否有环,判断是否

ThePythonFucker的博客 1万+

Cloud Connector RFC 访问控制深度实践:为 SAP BTP ABAP environment 打通安全、可控的远程连接

本文是一份面向企业ABAP团队与平台工程团队的Cloud Connector RFC访问控制配置指南。文章详细介绍了虚拟主机/实例号、负载均衡、资源白名单等核心概念,并提供了从零开始的配置流程。主要内容包括:通过Cloud Connector建立安全隧道的价值(零暴露、最小权限)、两种连接类型(无负载均衡/带负载均衡)的配置方法、资源白名单设置技巧,以及两个典型应用场景(Custom Code Migration远程检查与BAPI调用)的实操案例。指南基于SAP官方文档,包含落地经验与避坑建议,可帮助团队快

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

基于STM32的录音机设计(STM32F103+VS1053B)

本项目设计并实现了一款基于STM32微控制器的便携式录音机。该录音机采用STM32F103C8T6作为主控芯片,结合VS1053B音频编解码模块、SD卡存储、OLED显示屏以及按键模块,提供了手动录音、自动录音和录音回放等多种功能。

1万+

【数据结构——有向图】有环无环判定、拓扑排序(DFS、BFS)

有向图(Directed Graph),也被称为有向图形或方向图,是一种图的类型。在有向图中,图中的边具有方向,从一个顶点指向另一个顶点。在有向图中,每个顶点表示一个实体,而有向边则表示实体之间的关系或连接。这种有方向性的边表明了连接的起点和终点之间的单向关系。因此,有向图中的边具有起点和终点的概念,它们不能逆转方向。与有向图对应的是无向图(Undirected Graph),在无向图中,边是没有方向的,可以双向移动。相比之下,有向图更适合描述具有明确方向性的关系,例如有向的路径、进程之间的依赖关系等。

weixin_45618869的博客 1万+

【异常】‘build.plugins.plugin.version‘ for org.apache.maven.plugins:maven-resources-plugin is missing

maven-compiler-plugin 插件版本信息没有指定导致了错误提示如下字面意思就是没有指定版本信息。

奶爸的编程之路,也就一周冷个三天 4599

ZOJ 2475 Benny's Compiler(dfs判断有向图给定点有没有参与构成环)

B - Benny's Compiler Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld &amp; %llu Submit Status Practice ZOJ 2475 Description These days Benny has designed a new ...

Y先森0.0 171

InvocationException: GraphViz‘s executables not found【BUG已解决】

在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: 报错语句为:网上很多答案告诉我们,要我们安装GraphViz模块,然而并不对! 如下,我安装了GraphViz,但是还是报错了。 所以说问题不在这,我查阅质料发现,改正这个bug的方法有一个:下文详细描述。解决bug为: 1.去graphviz.官方下载自己电脑符合的操作系统的安装包:2,安装的时候,记住自己安装在电脑里的位置:以我的电脑为例,我的

一键难忘的博客 3968

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基于邻接矩阵的判断有向图是否有环

输入:[[0,1,0],[0,0,1],[1,0,0]] 输出:1 解释:1->2->3->1构成一个环,所以返回1表示有环 输入:[[0,1,0],[0,0,1],[0,0,0]] 输出:0 解释:1->2->3,这是一条拓扑路径,所以返回0表示没有环 #include<iostream> #include<vector> #i...

qq_35747066的博客 5640

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

有向图和无向图和树判断是否有环和无环

图只有树边和反向边,如果有反向边那么就有环,否则就是树或森林。 有向图的code如下: #include #include #include const int maxn=1001; int vis[maxn]; int map[maxn][maxn]; int flag; int n,m; void input() { memset(vis,0,sizeof(vis));

ouyangruo的博客 7391

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

用dfs判断一个有向图是否有环

解决这个问题的算法的思路是对一个节点u进行dfs,判断是否能从u回到自己这个节点,即是否存在从u到u的回路。 我们可以用一个color数组代表每个结点的状态,-1代表还没被访问,0代表正在被访问,1代表访问结束 如果一个状态为“0”的结点,与他相连的结点状态也为“0”的话就代表有环,这个可以用dfs实现 #include <iostream> #include <vect...

gh6267的博客 1万+

有向图 & 无向图 环判断

公司成天坑爹考试;不过我下个月才考。闲来无事,写个算法玩玩。 PS,公司坑爹,不让用stl;所以用一个数组来替代stl::stack。 ++++++++++++++++++++++++++++++++++++ #无向图 无向图比较简单,只需要用一个辅助的Visit 数据记录点是否被访问过即可。 #include <iostream> //#include <st...

weixin_33691700的博客 212

(1小时数据结构)数据结构c++描述(二十六)--- 图(判断图是否有环)

有关图的定义,与代码程序的定义在上个章节中:传送们,图的定义与遍历 依旧是这个图,我们可以看到图是有环的。 那代码中我们如何去判断是否有环呢?图的环跟点链表是不同的,不能采用“时钟法” 来判断.那我们用什么办法呢,其实很简单, 原理就是DFS遍历思想,在遍历的时候记录,每个节点是false,遍历到了该成true ,当下个节点是true就说明了是环。 有关DFS遍历是上一章的知识点,不知道的同学们请看前一章。 如:1 - 2 -5 - 8 -3 - 5 发现有重复的环。 ...

比卡丘不皮的博客 1112

【数据结构与算法】spfa判断是否存在负环

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式如果图中存在负权回路,则输出 Yes,否则输出 No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。

vox520的博客 298

判断无向图/有向图中是否存在环

本文主要针对如何判断有向图/无向图中是否存在环的问题进行简单的论述。 一 无向图 1.利用DFS进行判断 利用DFS判断有向图是否存在环,是最为常用的一种方法,虽然这种方法很常用,但可参考的代码的实现比较少,下面对这种方法及其实现进行详细的阐述。 首先,利用DFS判断无向图中是否换的原理是:若在深度优先搜索的过程中遇到回边(即指向已经访问过的顶点的边),则必定存在环。 所以说,是否存在环...

lattice的博客 9925

【题解】Arbitrage POJ - 2240 ⭐⭐ 【判负环】

Arbitrage POJ - 2240 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US ...

Suprit's blog 797

有向图、无向图是否有环的判断

今天在做数据库的调度冲突可串行性判别的程序,中间要用到有向图中环判定的问题,特摘录如下。这些算法和思想都是来自网上的,在此感谢原作者! 先介绍一下无向图的判断算法,这个比较简单: 判断无向图中是否存在回路(环)的算法描述 如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。 算法:      第一步:删除所有度      第二步:将度数变为1的顶点排入

MemRay 4万+
下一篇: 洛谷 P1378 油滴扩展
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值