赞
踩
华为的笔试题里出现了找出有向图环路的问题(最多只有一个环),这里记录一下解法:
使用两个数组 visited 和 onpath,visited数组记录当前节点是否被访问过,onpath数组某个节点是否在搜索路径上。再使用一个栈,记录当前的搜索路径。对于节点k,如果它不在搜索路径上,对它的所有邻接点dfs,并标记 visited[k] = true, onpath[k] = true, stack.push(k);如果如果它也在搜索路径上(在栈里),那么栈中从k到栈顶的所有节点,组成了一个环,于是就找到了这个环路。对k的所有邻接点遍历完成后,onpath[k] = false,并将k出栈。对所有没有被标记visited的节点都执行此操作,即可找出所有环路。
问题和代码如下:
有向图寻找环路
题目描述
给定一个有向图,假定最多10个节点,节点编号依次为A~J,如果A节点到B节点之间有通路则描述为A->B,多条边的描述之间以分号隔开,给定一个有向图,求该有向图中的所有环路,环路以节点编号的最小的节点开始输出,假定一个有向图最多一个环路,如果没有环路则输出空字符串“-”。输入为连接链表。
输入描述:
输入为连接链表字符串,如 :A->B;B->D;C->B;C->E;D->C输出描述:
环路节点组成的字符串,如:输出字符串BDC,标识B->D->C->B组成环路
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入</
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。