Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >短视频直播源码,有向网的拓扑排序

短视频直播源码,有向网的拓扑排序

原创
作者头像
yunbaokeji柯基
修改于 2020-11-09 10:07:09
修改于 2020-11-09 10:07:09
69000
代码可运行
举报
文章被收录于专栏:直播知识直播知识
运行总次数:0
代码可运行

短视频直播源码,有向网的拓扑排序实现的相关代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 Author:Albert Tesla Wizard
 Time:2020/10/28 23:07
*/
#include<bits/stdc++.h>
#define OK 1
#define Error 0
#define MAXSIZE 20
using namespace std;
typedef enum{DG,UDG,DN,UDN}Grpahkind;
typedef struct ArcNode
{
    ArcNode* nextarc;
    int* info;
    int adjvertex;
};
typedef struct VNode
{
    char data;
    ArcNode* firstarc;
}VNode,AdjList[MAXSIZE];
typedef struct ALGraph
{
    AdjList vertex;
    int vertexnum,arcnum;
    int kind;
}ALGraph;
int Locate(char v,ALGraph&G)
{
    for(int i=1;i<=G.vertexnum;i++)
    {
        if(G.vertex[i].data==v)return i;
    }
    return -1;
}
int create(ALGraph&G)
{
        char c1,c2;
        int tail,head,w;
        cout<<"请输入有向网的顶点数目:"<<endl;
        cin>>G.vertexnum;
        cout<<"请输入有向网的弧的数目:"<<endl;
        cin>>G.arcnum;
        cout<<"请输入有向网的顶点集合:"<<endl;
        for(int i=1;i<=G.vertexnum;i++){cin>>G.vertex[i].data;G.vertex[i].firstarc=NULL;}
        for(int i=1;i<=G.arcnum;i++)
        {
            cout<<"请输入组成有向网的弧的两个顶点c1,c2的值及该弧权值:"<<endl;
            cin>>c1>>c2>>w;
            tail=Locate(c1,G);
            head=Locate(c2,G);
            ArcNode* p=new ArcNode;
            p->info=new int;
            *(p->info)=w;
            p->adjvertex=head;
            p->nextarc=G.vertex[tail].firstarc;
            G.vertex[tail].firstarc=p;
        }
    return OK;
}
void print(ALGraph&G)
{
    cout<<"有向网的顶点数目为:"<<G.vertexnum<<endl;
    cout<<"有向网的顶点集合为:";
    for(int i=1;i<=G.vertexnum;i++)cout<<G.vertex[i].data<<" ";
    cout<<endl;
    cout<<"有向网的弧的数目为:"<<G.arcnum<<endl;
    cout<<"有向网弧的集合为:";
        for(int i=1;i<=G.vertexnum;i++)
        {
            ArcNode* p=G.vertex[i].firstarc;
            while(p)
            {
                cout<<"<"<<G.vertex[i].data<<","<<G.vertex[p->adjvertex].data<<","<<*(p->info)<<">";
                p=p->nextarc;
            }
        }
        cout<<endl;
}
void FindInDegree(int indegree[],ALGraph G)
{
    ArcNode* p;
    for(int i=1;i<=G.vertexnum;i++)indegree[i]=0;
    for(int i=1;i<=G.vertexnum;i++)
    {
        p=new ArcNode;
        p=G.vertex[i].firstarc;
        while(p)
        {
            indegree[p->adjvertex]++;
            p=p->nextarc;
        }
    }
}
int TopologicalSort(ALGraph G)
{
    int cnt=0,indegree[MAXSIZE];//输出的顶点数
    stack<int>S;
    ArcNode* p;
    FindInDegree(indegree,G);
    for(int i=1;i<=G.vertexnum;i++)if(!indegree[i])S.push(i);
    while(!S.empty())
    {
        int j=S.top();
        S.pop();
        cout<<G.vertex[j].data<<" ";
        cnt++;
        for(p=G.vertex[j].firstarc;p;p=p->nextarc)
        {
            int k=p->adjvertex;
            if(!(--indegree[k]))S.push(k);
        }
    }
    if(cnt<G.vertexnum){cout<<"该有向网有回路"<<endl;return Error;}
    else {cout<<"为一个拓扑序列"<<endl;return OK;}
}
int main()
{
    system("color 5E");
    ALGraph G;
    create(G);
    print(G);
    TopologicalSort(G);
    return 0;
}

以上就是短视频直播源码,有向网的拓扑排序实现的相关代码, 更多内容欢迎关注之后的文章

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图的遍历 - 数据结构
图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的其它算法如求解图的连通性问题,拓扑排序,求关键路径等都是建立在遍历算法的基础之上。
黄规速
2022/04/14
5610
图的遍历 - 数据结构
各种基本算法实现小结(四)—— 图及其遍历
====================================================================
阳光岛主
2019/02/20
5330
直播短视频源码,邻接矩阵实现图的相关代码
DJ-Disco_je4P08NwErV3.jpeg /* Author:Albert Tesla Wizard Time:2020/10/26 20:22 */ #include<bits/stdc++.h> #define OK 1 #define Infinity INT_MAX #define Error -1 const int MAXSIZE=20; using namespace std; typedef enum{DG,UDG,DN,UDN}Graphtype; typedef i
yunbaokeji柯基
2020/10/30
5580
直播短视频源码,邻接矩阵实现图的相关代码
图的拓扑排序的算法实现,C语言,栈,超详细版本
拓扑排序在工程管理领域中的应用广泛,可用于判断工程能否顺利开展,即判断有向图中是否存在回路。对于一个有向图,先由键盘输入其顶点和弧的信息,采用恰当存储结构保存该有向图后,依据拓扑排序算法思想输出其相应的顶点拓扑有序序列,并提示用户是否存在回路。
Java架构师必看
2021/04/22
1.3K0
数据结构题集(严书)图 常见习题代码
7.25 /*假设对有向图中n个顶点进行自然编号并以三个数组s[1..max],fst[1..n],lst[1..n]表示之其中数组s存放每个顶点的 后继顶点的信息第i个顶点的后继顶点存放在s中下表从fst[i]起到lst[i]的分量中(i=1,2,...n)若fst[i]>lst[i]则第i个顶 点无后继顶点,试编写判别该有向图中是否存在回路的算法*/
glm233
2020/09/28
5550
数据结构——图
设图 A = (V, E) 有 n 个顶点,则图的邻接矩阵是一个二维数组 A.Edgen,定义为:
ruochen
2021/06/29
9180
数据结构——图
图的应用——拓扑排序
AOV网(Activity On Vertices) 在一个表示工程的有向图中,用顶点表示活动,用有向边<Vi, Vj>表示活动Vi 必须先于活动Vj 进行。这种有向图叫做顶点表示活动的AOV网络 。 AOV网特点: AOV网中的弧表示活动之间存在的某种制约关系 AOV网中不能出现回路 算法思想 输入AOV网络。令 n 为顶点个数。 在AOV网络中选一个没有直接前驱的顶点, 并输出之; 从图中删去该顶点, 同时删去所有它发出的有向边; 重复以上 2、3 步, 直到: - 全部顶点均已输出,拓扑有
ruochen
2021/07/02
4940
图的应用——拓扑排序
图的广度优先搜索(BFS)
把以前写过的图的广度优先搜索分享给大家(C语言版) 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAX_VERTEX_NUM 20 4 #define MAXQSIZE 100 5 #define OK 1 6 typedef char VertexType; 7 typedef int QElemType; 8 9 typedef struct ArcNode//边结点 10 { 11 int a
lizelu
2018/01/11
9860
图的广度优先搜索(BFS)
图的基本算法实现(邻接矩阵与邻接表两种方法)
==========================================================
阳光岛主
2019/02/20
1K0
基于邻接表的AOE网实现关键路径查询
按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法,并验证如下图1所示AOE网的关键路径。
一个风轻云淡
2023/12/29
3610
图的存储结构
废话不多说,上来撸干货。 我们知道,实现图共有两种常用的方法:邻接矩阵、邻接表法。接下来我们就来一一介绍这两种方法。 实际上,图的存储结构有些复杂,为了方便读者理解,也为了方便笔者的写作,这部分的篇幅会长一些,稍有些啰嗦,还望见谅。
roobtyan
2019/02/21
1.1K0
图的存储结构
数据结构 第六章 图
图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。 在线性表中,元素个数可以为零,称为空表; 在树中,结点个数可以为零,称为空树; 在图中,顶点个数不能为零,但可以没有边。
Twcat_tree
2022/11/29
5170
数据结构  第六章  图
Johnson算法「建议收藏」
Johnson算法可以在O(V*V lgV + VE)的时间内找到所有节点对之间的最短路径,对于稀疏图来说,算法的渐进表现要由于重复平方法和FloydWarshall算法,如果图没有权值为负值的环路,则返回所有结点对的最短路径权重的矩阵,否则,报告图有权值为负的环
全栈程序员站长
2022/11/03
8120
AOV网与拓扑排序
图解演示拓扑排序的过程 不是AOV网的情况 由下可知,当前图中存在回路,不是AOV网 拓扑排序的数据结构 编程流程 拓扑排序算法伪代码 完整代码 #include<iostream> using namespace std; #include<stack> #define MAX 10//最大顶点数为10 //边表结构体 typedef struct EdgeNode { int agjvex;//邻接点域,存储顶点对应的下标 //int weight;//用来存储权值,对于非网图这
大忽悠爱学习
2021/04/01
4050
AOV网与拓扑排序
图的应用——最小生成树
最小生成树 生成树(极小连通子图):含有图中全部n个顶点,但只有n-1条边。并且n-1条边不能构成回路。 [在这里插入图片描述] 生成森林:非连通图每个连通分量的生成树一起组成非连通图的生成森林。 [在这里插入图片描述] 求最小生成树 使用不同的遍历图的方法,可以得到不同的生成树 从不同的顶点出发,也可能得到不同的生成树。 按照生成树的定义,n 个顶点的连通网络的生成树有 n 个顶点、n-1 条边。在网的多个生成树中,寻找一个各边权值之和最小的生成树 构造最小生成树的准则 必须只使用该网中的边来构造最小生成
ruochen
2021/06/29
9080
图的应用——最小生成树
数据结构算法整理-06-图
V0与V1、V2、V3都有边,因此第0行的1、2、3位置处置1。 Vi与Vj有边,则第i行的第j位置处置1。
devi
2021/08/18
2490
最短路径算法的编程与实现 C语言
operating system version:Win11 CPU instruction set:  x64 Integrated Development Environment:Viusal Studio 2022
timerring
2025/05/24
1310
最短路径算法的编程与实现 C语言
图(Graph)的常用代码集合
图的相关概念请查阅离散数学图这一章或者数据结构中对图的介绍。代码来自课本。 /*Graph存储结构*/ //邻接矩阵表示法 #define MAX_VERTEX_NUM 20 /*最多顶点个数*/ #define INFINITY 32768 /*表示极大值,即∞*/ /*图的种类:DG表示有向图,DN表示有向网,DUG表示无向图,UDN表示无向网*/ typedef enum {DG, DN, UDG, UDN} GraphKind; /*枚举类型*/ typedef char Ve
Steve Wang
2018/02/05
1.4K0
【数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
Rossy Yan
2024/12/24
4300
【数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
基于邻接表的无向图的深度广度遍历实现
邻接表,无向图,深度、广度遍历,测试通过 基本构建图的邻接表结构以及深度广度遍历 public class ALGraph { AdjList[] vertices; int vexNum; int arcNum; boolean[] visited; public ALGraph(int vexNum,int arcNum){ this.vexNum = vexNum; this.arcNum = arcNum; } //建立有vexNum个结点arcNum条边的无向图的邻接表存
张凝可
2019/08/22
8110
相关推荐
图的遍历 - 数据结构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验