煎饼卷饼 2022-07-30 16:55 采纳率: 98%
浏览 200
已结题

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

img


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

  • 写回答

3条回答 默认 最新

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

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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效