不需要睡觉o 2022-07-30 16:55 采纳率: 94.7%
浏览 220
已结题

已知有向图具有n个顶点 判断图中是否存在有向回路

img


需要盖要描述算法的思想,并且在关键的地方给出简明的注释,使用c语言。

  • 写回答

3条回答 默认 最新

  • 北座猎户 2022-07-31 08:30
    关注

    正确的解法应该有两种:
    1.拓扑
    2.dfs(深搜)
    回路的定义这里就不必再说了(毕竟我蒟QwQ)
    第一种方法是利用了拓扑排序的思想,在拓扑排序的过程中,我们往往需要保证图中没有回路,所以可以利用这个算法的边界:
    我们就正常进行拓扑序遍历:1.找到入度为零的点输出;2.删除与这些点相关的出度;3.重复上述直到图中不存在入度为零的点为止
    结束的时候判断一下,如果所有点都被输出了一遍,说明是没有回路的(就和我们平时走拓扑序一样,既然能成功,图就是没有回路的),反之则反(当然如果找不到入度为零的点就直接操作三)
    第二种方法相对简单一些,我们循环所有节点作为源点,从源点开始遍历,就写一个深搜的板子,再加一个判断:如果深搜的过程中遇到了源点就说明有回路(注意,这里和楼上的区别在于:我判断的是从某个点出发能否回到这个节点,而楼上判断的是某个节点被碰到过一次后是否会被再碰到一次,可以画几个图加深理解)
    (但是很显然搜索这个东西不剪纸和记忆化效率是比较……嗯……可能还比较玄学,所以个人喜欢用拓扑)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀