拓扑排序三种方法

hdu 拓扑排序 题目归纳 拓扑排序 定义和前置条件: 定义:将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。 如果这个概念还略显抽象的话,那么不妨考虑一个非常非常经典的例子——选课。我想任何看过数据结构相关书籍的同学都知道它吧。假设我非常想学习一门机器学习的课程,但是在修这么课程之前,我们必须 阅读详情
#include<stdio.h>
#include<string.h>
#define N 105
int map[N][N],indegree[N];
int Topo(int n)
{
    int i,j,ans;
    for(i=0;i<n;i++)
    {
        ans=n;
        for(j=0;j<n;j++)
        {
            if(indegree[j]==0)
            {
                indegree[j]--;
                ans=j;
                break;
            }
        }
        if(ans==n)//ans没有更新说明没有入度为0的结点了即无法进行拓扑排序
        {
            return 0;
        }
        for(j=0;j<n;j++)
        {
            if(map[ans][j]>0)//与上面选出来入度为0结点相连的点的入度-1
            {
                indegree[j]--;
            }
        }
    }
    return 1;
}
int main()
{
    int m,n,i,p,q,flag;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0&&m==0)
        {
            break;
        }
        memset(map,0,sizeof(map));
        memset(indegree,0,sizeof(indegree));
        for(i=0;i<m;i++)
        {
            scanf("%d%d",&p,&q);
                            if(map[p][q]==0)//在这儿必须判断,wa了好几次,
                            {
                                     map[p][q]=1;
                                     indegree[q]++;
                            }
        }
        flag=Topo(n);
        if(flag)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}
//BFS
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<queue>
using namespace std;
int indegree[1002];
int mp[1002][1002];
int book[1002];
int n,m;
int s,t;
const int INF=99999999;
queue<int> q;
void topsort(){
    int temp;
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(indegree[i]==0)
            q.push(i);
    }
    while(!q.empty()){
        temp=q.front();
        cout<<temp;
        q.pop();
        book[temp]=cnt++;
        for(int i=1;i<=n;i++){
            if(mp[temp][i]==1)
                if(--indegree[i]==0)
                    q.push(i);
        }
    }
}


int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            mp[i][j]=INF;
    for(int i=1;i<=m;i++){
        cin>>s>>t;
        if(mp[s][t]==INF)
            mp[s][t]=1;
        indegree[t]++;
    }
    topsort();
    return 0;
}
//DFS
int topo[1002];
int c[1002];
int t;
bool dfs(int u){
    c[u]=-1;
    for(int v=0;v<n;v++){
        if(G[u][v]){
            if(c[v]<0)
                return false;
            else if(!c[v]&&!dfs(v))
                return false;
        }
    }
    c[u]=1;topo[--t]=u;
    return true;
}
bool topsort(){
    t=n;
    memset(c,0,sizeof(c));
    for(int u=0;u<n;u++)
        if(!c[u])
            if(!dfs(u))
                return false;
    return true;
}
//c[u]=0 从未被访问
//c[u]=1 已经访问过,并且还递归访问过他的所有子孙
//c[u]=-1 正在访问

 

Android Studio中把llama.cpp编译Android .so 本文介绍了一个在Android Studio中集成llama.cpp的最小Demo实现方案,通过JNI将llama.cpp编译为Android.so库,实现本地加载GGUF模型进行文本生成。文章详细说明了项目结构配置(SDK≥30,NDK≥28)、CMake编译设置、Kotlin-JNI-C++的完整调用链实现,以及模型文件部署方式。该Demo采用每次请求新建上下文的简化设计,包含加载模型、生成文本、资源释放等核心功能,并提供了错误排查建议。项目舍弃了上下文保持等复杂功能以确保稳定性,适合作为端侧大语言模型 阅读详情

相关推荐

On the convergence of FedAvg on non-iid data

On the convergence of FedAvg on non-iid data

Lyn_S的博客 7081

拓扑排序

拓扑排序 一、拓扑排序的定义: 先引用一段百度百科上对于拓扑排序的定义: 对一个有向无环图 ( Directed Acyclic Graph 简称 DAG ) G 进行拓扑排序,是将 G 中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v ,若边 < u , v > ∈ E ( G ),则 u 在线性序列中出现在 v 之前。通常,这样的线性序列称为满足拓扑次序 ( Topological Order ) 的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这

chenweiye1的博客 6万+

Unity UI Toolkit避坑指南:从官方Samples到实际项目,这些‘坑’我帮你踩过了

本文分享了Unity UI Toolkit在实际项目中的避坑经验和优化技巧,包括动画系统的高效替代方案、3D世界UI的创新实现方式、USS样式继承的反直觉规则等。通过详细的代码示例和性能优化策略,帮助开发者避免常见陷阱,提升开发效率。

weixin_29535577的博客 343

拓扑排序详解

古人学问无遗力 少壮功夫老始成

qq_56012214的博客 2万+

矩形口径喇叭天线设计——参数设置

我们建立好矩形口径喇叭天线的模型后(模型建立可参考B站相关视频或者李明洋的《HFSS天线设计》),如何修改参数达到我们的指标呢?

m0_57263863的博客 1万+

手把手教你接入京东购物小程序:从领券到下单的全流程解析

本文详细解析了如何从API申请到领券下单,手把手教你接入京东购物小程序的全流程。涵盖京东联盟账号注册、商品信息获取、优惠券链接转换等关键技术实践,帮助开发者高效实现电商功能集成,提升用户购物体验。

g5h6i的博客 911

java 拓扑运算_拓扑排序(三)之 Java详解

拓扑排序介绍拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。这样说,可能理解起来比较抽象。下面通过简单的例子进行说明!例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利用到拓扑排序,它就是用...

weixin_42551967的博客 1371

别再用RIDE了!VSCode+RobotFramework插件打造现代化测试开发环境

本文介绍了如何利用VSCode和RobotFramework插件构建现代化的测试开发环境,替代老旧的RIDE工具。详细讲解了环境配置、插件安装、智能代码补全、测试运行与调试等核心功能,帮助开发者提升自动化测试效率。文章还提供了高级技巧、最佳实践和常见问题解决方案,助力团队实现平滑迁移。

weixin_28829629的博客 480

拓扑排序(topological sorting)介绍及Python实现

拓扑排序(topological sorting)介绍及Python实现,介绍了拓扑排序基本算法原理,并给出基于深度优先搜索和基于广度优先搜索的Python实现。

chenxy_bwave的专栏 2万+

基于STM32、HAL库的IP2736U_EF快充协议芯片简介及驱动程序设计

@param connected: 连接状态指针 (1=已连接, 0=未连接)= 0x2736) // 检查厂商ID。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。

corlin6688的博客 430

【C#程序员入门AI】必知的一些知识

2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!

人工智能AI技术 410

数据结构--拓扑排序

对于一个进行拓扑排序,是将G中所有节点排成一个线性序列,该序列满足以下两个条件:① 每个节点有且仅出现一次 ② 若存在一条从节点A到节点B的路径,则在序列中A一定出现在B前面。对于求一个有向无环图的拓扑排序步骤:1.在图中找到一个没有前驱(入度为0)的节点,然后输出2. 从图中删除该节点和所有以它为起点的有向边3.重复操作1和操作2,直到图为空 或 当前图不存在无前驱的顶点为止第一步操作,删除节点 1第二步操作,删除节点 2第三步操作,删除节点4最后拓扑排序依次为 3 5,不再画图讲述。

Zhang_Qin123的博客 5529

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3148

HDU 1285 确定比赛名次(拓扑排序的三种实现方法)

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22189    Accepted Submission(s): 8925 Problem Description 有N个比赛队(1   I

Shyazhut 448

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hdu1285 确定比赛名次 (拓扑排序 数组.链表和BFS三种方法)

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22417    Accepted Submission(s): 9081 Problem Description 有N个比赛队(1

qq_35634181的博客 474

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【图】Leetcode 797,207 ,210排课表问题 ,三种方法遍历,拓扑排序,回溯解决课程表问题

此篇文章从图的数据结构叙述说起,解决了图问题中leetcode常出现的图问题,一是图的遍历,二是环检测,三是二分图判定三类问题。 一、此文章解决Leetcode 图问题 1)797 图的所有可能路径 2)判断是否有环 3)判断二分图 二、 图的数据结构 图有2种数据结构构成1)邻接矩阵 :即用V-V矩阵来代表每个顶点和边,V代表顶点。如果是无加权图则用简单的二维布尔数组表示。加权图则可以用二维数组来表示边的距离。它的好处是访问很快,缺点是费空间。如果图有很多顶点但是边不多,则造成不必要的空间损失

lindaicoding的博客 785

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

拓扑排序模板

三种方法类似,记录数据和删除以没有前驱的顶点为尾的箭头时有点区别 1 /*hdu1285--采用二维数组记录两者之间的关系*/ 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 using namespace std; 6 int map[510][510];...

weixin_33704591的博客 87

拓扑排序的具体几种方法及

一,几种基本的方法 1.无前趋的的顶点优先拓扑排序     思路:在有向图建立完成之后,维护两个点集,一个是当前出度为0的点集,记为①,另一个是出度不为0 的点集,记为②,以及一个记录各个点出度的数组。首先遍历一遍图的全部边,初始化所有点的出度,然后出度为0的点依次 入①,然后将①中的点分别出列,每次出列都需要更新各个点的出度,即把所有跟出列的点邻接的点出度-1(有多条边,则相应减

juanlansexuehua的博客 6582

图结构专栏——拓扑排序

三种方法实现拓扑排序 一、什么是拓扑排序 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。 例如,下面这个图: 它是一个 DAG 图,那么如何写出它的拓扑排序呢?这里说一种比较常用的方法

lizefeng1998的博客 9023

拓扑排序(Topology_Sort)

基本思想 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。 算法原理 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Direct

azeyeazeye的博客 1512

判断图有无环_判断图中是否有环的三种方法

0、什么是环?在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径。在有向图中,一个结点经过两种路线到达另一个结点,未必形成环。1、拓扑排序1.1、无向图使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下:求出图中所有结点的度。将所有度 <= 1 的结点入队。(独立结点的度为 0)当队列不空时,弹出队首元素,把与队首元素相邻节点的度减一。如果相邻节点的度变为一,...

weixin_35702533的博客 3016

有向图3----顶点排序和拓扑排序

拓扑排序:给定一幅有向图,将所有顶点排序,使得所有有向边均从排在前面的元素指向排在后面的元素 有向图DAG:一幅不含有向环的有向图 当且仅当一幅有向图是无环图时,才能进行拓扑排序 顶点排序 进行深度优先搜索DFS时,每个顶点会遍历一遍,其中顶点访问的顺序有三种: 前序:顶点访问的顺序 递归之前保存在队列中 后序:顶点完成相邻顶点访问的顺序 递归之后保存在队列中 逆后序:顶点完...

大魔王 2698

判断图中是否有环的三种方法

0 什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径。 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环。 1 拓扑排序 1.1 无向图 使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下: 求出图中所有结点的度。 将所有度 <= 1 的结点入队。(独立结点的度为 0) 当队列不空时,弹出队首元素,把与队首元素相邻节点的度减一。如果相邻节点的度变为一,则将相邻结点入队。 循环结束时判断已经访问的结点数是否等于 n。等于 n 说明全部结点都.

CC 5万+
上一篇: Silver Cow Party (Dijkstra)
下一篇: vector存图解决最短路(带堆优化)
donCoder
博客等级 码龄9年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值