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