Iam_Sandeep

topological sort using kahns algorithm bfs + dfs

Jun 1st, 2021 (edited)
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.02 KB | None | 0 0
  1. #method 1:using iterative approach bfs
  2. class Solution:
  3.    
  4.     #Function to return list containing vertices in Topological order.
  5.     def topoSort(self, V, adj):
  6.         v=[False]*V
  7.         q=[]
  8.         def dfs(src):
  9.             v[src]=True
  10.             for node in adj[src]:
  11.                 if v[node]==False:
  12.                     dfs(node)
  13.             q.append(src)
  14.         # Code here
  15.         for i in range(V):
  16.             if v[i]==False:
  17.                 dfs(i)
  18.         return q[::-1]
  19.  
  20.  
  21. #{
  22. #  Driver Code Starts
  23. # Driver Program
  24.  
  25.  
  26. #method 2 dfs and colors method
  27. '''
  28. 0--->unvisited
  29. 1--->processing
  30. 2--->processed
  31. '''
  32. class Solution:
  33.     def findOrder(self,adj, n):
  34.        
  35.         def dfs(src):
  36.             if vis[src]==1:return False
  37.             vis[src]=1
  38.             for ver in adj[src]:
  39.                 if vis[ver]!=2:#very imp
  40.                     if dfs(ver)==False:
  41.                         return False
  42.             vis[src]=2
  43.             ans.append(src)
  44.         vis={i:0 for i in adj.keys()}
  45.         for i in adj.keys():
  46.             if vis[i]==0:
  47.                 if dfs(i)==False:return []
  48.         return ans[::-1]
  49. '''
  50. These are not complete codes. Just edited some boiler plate but logic is correct.
  51. Question link:
  52. https://practice.geeksforgeeks.org/problems/alien-dictionary/1#
  53. '''
  54. #method 3 using dictionaruy
  55. '''
  56. Here also three colors but bit different
  57. if key is not in vis:unvisited
  58. if key is in vis and vis[key]==False:processed
  59. if key is in vis and vis[key]==True:processing
  60. '''
  61.  
  62. class Solution:
  63.     def findOrder(self,adj, n):
  64.         ans=[]
  65.        
  66.         def dfs(src):
  67.             if src in vis:
  68.                 return vis[src]
  69.             vis[src]=True
  70.             for ver in adj[src]:
  71.                 if dfs(ver)==True:
  72.                     return ''
  73.             vis[src]=False
  74.             ans.append(src)
  75.         vis={}
  76.         for i in adj.keys():
  77.             if i not in vis:
  78.                 if dfs(i):return ''
  79.         #print(ans[::-1])
  80.         return ans[::-1]
  81.  
Add Comment
Please, Sign In to add comment