📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
楼主: 14417335
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 有向图最短Cycle

全局:
jy_121 发表于 2019/04/08 11:29:26


能详细说下如何dfs吗,O(V + E)的话怎么能在遍历时避免重复访问又记录环路呢?谢谢

visit=0(not visit) 1 visiting 2 visited
def cycle(node)
     if visit[node]==visiting:return true
     visit[node]=visiting
     flag=false
     for neighor in node.neighbors():
           flag |= cycle(neighbor)
     visit[node]= visted
     return flag
伪代码就是这样。

评分

参与人数 1大米 +3 收起 理由
jy_121 + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
htfy96 2019-4-8 19:36:28 | 只看该作者
全局:
有个非常简单的做法。对于每条边(v1, v2),check有没有v2->v1的路径。

v1 -> v*的connectivity可以跑一遍BFS复杂度是O(V+E)。两两的connectivity可以O(V * (V+ E))这么跑出来。所以总的复杂度是O(E + V*(V+E)) = O(V(V+E))

补充内容 (2019-4-8 19:37):
* check v2->v1路径的最短长度。这个bfs就能跑出来
回复

使用道具 举报

🔗
suwen_1983 2019-4-8 22:52:42 | 只看该作者
全局:
有向图最短Cycle: dfs和floyd都可以
回复

使用道具 举报

🔗
shannyhe 2019-4-30 00:30:27 | 只看该作者
全局:
umialpha 发表于 2019-4-3 12:03
bfs很难写对,比如考虑这样一个很简单的例子(1,2), (1,3),(3,2) 在做bfs的时候que里是[1,2,3]在遍历3的时 ...

层主是假设没有给定起点是么?如果给定了起点,比如1的话,bfs就很简单
回复

使用道具 举报

🔗
umialpha 2019-4-30 13:42:18 | 只看该作者
全局:
shannyhe 发表于 2019-4-30 00:30
层主是假设没有给定起点是么?如果给定了起点,比如1的话,bfs就很简单

请问该怎么写呢?
回复

使用道具 举报

🔗
jollibeeee 2019-6-15 07:52:43 | 只看该作者
全局:
umialpha 发表于 2019-4-30 00:42
请问该怎么写呢?

想请问下BFS为什么比较难写呢? 题目是有向图的话你的这个例子不成立吧?
回复

使用道具 举报

🔗
umialpha 2019-6-18 11:51:17 | 只看该作者
全局:
iiimisery 发表于 2019-6-15 07:52
想请问下BFS为什么比较难写呢? 题目是有向图的话你的这个例子不成立吧?

我的意思是很难判断是否有环。如果前提是一定有的话。拿就简单了。
回复

使用道具 举报

全局:
umialpha 发表于 2019/06/18 11:51:17


我的意思是很难判断是否有环。如果前提是一定有的话。拿就简单了。

不好意思还是没太弄懂 如果没有环的话bfs也会因为queue为空返回-1吧?
回复

使用道具 举报

🔗
gu4p 2019-6-27 23:04:03 | 只看该作者
本楼:
全局:
多谢分享!
回复

使用道具 举报

🔗
lz4321234 2019-9-7 01:38:31 | 只看该作者
全局:
按照楼主给的参考, 题目要求是求全局最短环路吧?(多源点最短环路?)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表