当前位置: 首页 > wzjs >正文

网站建设cms公司的网站怎么运营

网站建设cms,公司的网站怎么运营,wordpress docker安装,网页设计与制作实训报告心得体会2000字拓扑排序 有向无环图一定是拓扑序列,有向有环图一定不是拓扑序列。 无向图没有拓扑序列。 首先我们先来解释一下什么是有向无环图: 有向就是我们两个结点之间的边是有方向的,无环的意思就是整个序列中没有几个结点通过边形成一个圆环。 下图就是一个…

拓扑排序

有向无环图一定是拓扑序列,有向有环图一定不是拓扑序列。

无向图没有拓扑序列。

首先我们先来解释一下什么是有向无环图:

有向就是我们两个结点之间的边是有方向的,无环的意思就是整个序列中没有几个结点通过边形成一个圆环。

下图就是一个有向无环图,它也一定是拓扑序列。

在这里插入图片描述

下图就是有向有环图:

在这里插入图片描述

拓扑序列:

首先我们引入度的概念:

对于有向图每个结点都有入度和出度,入度就是指向该结点的边数,出度就是该结点指向其他结点的边数。

如第一个图:

A的入度为0,出度为2;

B的入度为1,出度为1;

C的入度为1,出度为1;

D的入度为2,出度为0;

总结一下拓扑排序就是只有从前指向后的边,没有从后指向前的边。

如果是一个有向无环图,那么一定有一个点的入度为0,如果找不到一个入度为0的点,这个图一定是带环的。

拓扑排序满足:每条边(x,y),x在序列中都在y前面。

拓扑排序的思路:

一个有向图,如果图中有入度为 0 的点,就把这个点删掉,同时也删掉这个点所连的边。

一直进行上面出处理,如果所有点都能被删掉,则这个图可以进行拓扑排序。

我们画图来解释一下:

首先我们的有向无环图是这样的:

在这里插入图片描述

我们发现A的入度为0,那么A就可以作为源点(不会有边在它前面),然后删除A和A上所连的边,如下图:

在这里插入图片描述

然后我们发现B和C的入度都是0,那么同样删除B,C和B,C上所连的边,如下图:

在这里插入图片描述

然后D的入度为0,我们同样操作,最后图被删除干净,证明可以拓扑排序。

解题思路

首先记录各个点的入度

然后将入度为 0 的点放入队列

将队列里的点依次出队列,然后找出所有出队列这个点发出的边,删除边,同时边的另一侧的点的入度 -1。

如果所有点都进过队列,则可以拓扑排序,输出所有顶点。否则输出-1,代表不可以进行拓扑排序。

我们先来看一下拓扑排序的模板:

时间复杂度 O(n+m), n表示点数,m表示边数。

bool topsort()
{int hh = 0, tt = -1;// d[i] 存储点i的入度for (int i = 1; i <= n; i ++ )if (!d[i])q[ ++ tt] = i;while (hh <= tt){int t = q[hh ++ ];for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];if (-- d[j] == 0)q[ ++ tt] = j;}}// 如果所有点都入队了,说明存在拓扑序列;否则不存在拓扑序列。return tt == n - 1;
}

我们来看一下练习题:

在这里插入图片描述

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int h[N],e[N],ne[N],idx; //邻接表存储图
int n,m; //n个点,m个边
int q[N],d[N];//q表示队列,d表示点的入度
void add(int a,int b)
{e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
bool topsort()
{int hh=0,tt=-1;for(int i=1;i<=n;i++){if(!d[i])//如果i这个点的入度为0,那么我们就入队q[++tt]=i;}while(hh<=tt) //如果队列不为空{int t=q[hh++];//用t来接收队头的元素,同时队头指针hh++;for(int i=h[t];i!=-1;i=ne[i])//我们来从t结点开始遍历它的边{int j=e[i];//t有一条边指向jd[j]--;//删除掉t指向j的这条边,j的入度-1;if(d[j]==0) //如果j的入度为0,那么我们就将j入队q[++tt]=j;}}return tt==n-1;//表示如果n个点都入队了话,那么该图为拓扑图,返回true,否则返回false//我们的tt初始值是-1,当插入一个值的时候tt先++在插入,所以我们一个有n个结点,全部入队的话tt指针应该是n-1;
}
int main()
{cin>>n>>m;//保存点的个数和边的个数memset(h,-1,sizeof(h));//初始化邻接表for(int i=0;i<m;i++)//我们一共有m个边,所以我们循环插入边{int a,b;scanf("%d%d",&a,&b);add(a,b);d[b]++;//插入的边是由a指向b的,所以b的入度++;}if(topsort()){for(int i=0;i<n;i++) printf("%d ",q[i]);puts("");}elseputs("-1");return 0;}

文章转载自:

http://Lsqh7rGa.knLyL.cn
http://y3TiKYKR.knLyL.cn
http://NOVIu0yn.knLyL.cn
http://15TcCxPx.knLyL.cn
http://9sW5hMe8.knLyL.cn
http://8J2fmhrZ.knLyL.cn
http://CEffdOwp.knLyL.cn
http://Vr0Eed9b.knLyL.cn
http://QzFoKhAt.knLyL.cn
http://es96JVqj.knLyL.cn
http://ATG7CZsy.knLyL.cn
http://UFe3IX45.knLyL.cn
http://JwQ1PpyE.knLyL.cn
http://vzLNSLJm.knLyL.cn
http://pJHmbaZp.knLyL.cn
http://VMVMSNQ8.knLyL.cn
http://YDXdRh5V.knLyL.cn
http://2EKnPj4b.knLyL.cn
http://LejEdybx.knLyL.cn
http://I6LwHlIy.knLyL.cn
http://s8qxmZCE.knLyL.cn
http://dkoAJB0k.knLyL.cn
http://ksDSr2xt.knLyL.cn
http://vFo6dX4q.knLyL.cn
http://FMpDF2xl.knLyL.cn
http://s5wHoUpN.knLyL.cn
http://PxoDN952.knLyL.cn
http://w9Jistqv.knLyL.cn
http://qsxFbRPt.knLyL.cn
http://iIyawqpf.knLyL.cn
http://www.dtcms.com/wzjs/747086.html

相关文章:

  • 有没有网站免费的随州网站推广
  • 做网站怎样申请域名有关应用网站
  • 网站备案什么鬼网站收录不好排名高
  • 学校开发网站公司网站设计名称
  • ps做网站编排百度做广告推广怎么样
  • 做导购网站用什么样的主机东莞百度网站快速排名
  • 网站建设哪家g好自己建设网站需要审核吗
  • 用jsp做的汽车网站wordpress文章瀑布流
  • 福田网站建设seo新科造价员可以做兼职的网站
  • 局域网下怎么访问自己做的网站做印尼购物网站如何发货
  • 天宁建设网站wordpress 4.5.2模板
  • 关于网站建设的简历模板网站建设应该应聘什么岗位
  • 网站推广怎么写做的最好的本地生活网站
  • 佛山网站建设公司哪家比较好广州古柏广告策划有限公司
  • 什么网站可以做微招聘wordpress表导入
  • 网站的客户体验3d建模学费一般多少钱
  • 最少的钱做网站新手做外贸怎么学
  • 做网站 斗地主什么都不懂能去干运营吗
  • 中讯高科网站建设安装wordpress报404错误
  • 集团制度建设网站做网站还要写文章吗
  • 怎么做网站推广毫州天津全面解封最新通告
  • 网站首页index.html给一个网站做需求分析
  • 我自己怎么建网站项目管理中软件分类为
  • 做网站常用的背景图像微信定制开发
  • 哈尔滨网站建设团队查询企业邮箱
  • 做网站优化步骤烟台卓通网络科技有限公司
  • 网站怎么做cdn网站服务器搭建的步骤
  • 公司网站建设维护的岗位陕西建工第三建设集团网站
  • 国外优秀海报设计网站码支付wordpress前端
  • 网站建设來选宙斯站长网站开发环境的意义