Define a DAG we need to find a path so that we can follow the path and get the result.
graph={'A':['B','C'],'B':['D','E'],'C':['B','F'],'D':[],'E':[],'F':[]} def dfs(graph): stack=[graph.keys()[0]] visit=set() while stack: key=stack[-1] if graph[key]==[]: stack.pop() visit.add(key) else: for val in graph[key]: if val in visit: graph[key].remove(val) else: stack.append(val) return visit #print dfs(graph) def recursive(graph,visit): print len(graph),len(visit) if len(graph)==len(visit): print visit return visit #print visit for key in graph: #print key if graph[key]==[] and key not in visit: visit.add(key) else: for elem in graph[key]: if elem in visit: graph[key].remove(elem) recursive(graph,visit) visit=set() print recursive(graph,visit)
loopgraph={'A':['B'],'B':['C','D','E'],'C':['A','F'],'D':[],'E':[],'F':[]} #print loopgraph.keys()[0] def check(stack): visit={} for elem in stack: if elem not in visit: visit[elem]=1 else: visit[elem]+=1 count=0 for key in visit: if visit[key]==2: count+=1 if count==len(visit): return True return False def findloop(graph): stack=[graph.keys()[0]] visit=set() while stack: if check(stack): return True top=stack[-1] if graph[top]==[]: stack.pop() visit.add(top) else: for val in graph[top]: if val in visit: graph[top].remove(val) else: stack.append(val) return False #print findloop(loopgraph)
can be done with iterative method.