Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.51 KB | None | 0 0
  1. from copy import deepcopy
  2.  
  3.  
  4. def makeAdj(arr, n):
  5.     adj = [[] for i in range(n)]
  6.     for i in arr:
  7.         adj[i[0]].append(i[1])
  8.         adj[i[1]].append(i[0])
  9.     return [sorted(i) for i in adj]
  10.  
  11.  
  12. def checkConnectedness(adj):
  13.     used = [False for i in range(len(adj))]
  14.     used[0] = True
  15.     stackDfs = [0]
  16.  
  17.     while stackDfs:
  18.         point = stackDfs.pop()
  19.         for v in adj[point]:
  20.             if not used[v]:
  21.                 stackDfs.append(v)
  22.                 used[v] = True
  23.     if False in used:
  24.         return False
  25.     return True
  26.  
  27.  
  28. def getJunctionPoints(adj):
  29.     junctionPoints = []
  30.     used = [False for i in range(len(adj))]
  31.     while False in used:
  32.         tempAdj = deepcopy(adj)
  33.         v = 0
  34.         for i in range(len(used)):
  35.             if not used[i]:
  36.                 used[i] = True
  37.                 v = i
  38.                 break
  39.         tempAdj[v] = []
  40.         for i in range(len(tempAdj)):
  41.             for j in range(len(tempAdj[i])):
  42.                 if tempAdj[i][j] == v:
  43.                     tempAdj[i].pop(j)
  44.                     break
  45.  
  46.         removeElem = 0
  47.         for i in range(len(tempAdj)):
  48.             if not tempAdj[i]:
  49.                 removeElem = i
  50.                 break
  51.         tempAdj.pop(removeElem)
  52.         for i in range(len(tempAdj)):
  53.             for j in range(len(tempAdj[i])):
  54.                 if tempAdj[i][j] > removeElem:
  55.                     tempAdj[i][j] -= 1
  56.  
  57.         if not checkConnectedness(tempAdj):
  58.             junctionPoints.append(v)
  59.     return junctionPoints
  60.  
  61.  
  62. def getComponents(adj):
  63.     junctionPoints = getJunctionPoints(adj)
  64.     if not junctionPoints:
  65.         return []
  66.  
  67.     used = [False for i in range(len(adj))]
  68.     for i in junctionPoints:
  69.         used[i] = True
  70.  
  71.     stackDfs = [junctionPoints[0]]
  72.     component = []
  73.     while "Python is cool":
  74.         if not stackDfs:
  75.             yield component
  76.             if False not in used:
  77.                 return
  78.             component = []
  79.             for i in range(len(used)):
  80.                 if not used[i]:
  81.                     stackDfs.append(i)
  82.                     used[i] = True
  83.  
  84.         point = stackDfs.pop()
  85.         component.append(point)
  86.         for v in adj[point]:
  87.             if not used[v]:
  88.                 stackDfs.append(v)
  89.                 used[v] = True
  90.  
  91.  
  92. if __name__ == "__main__":
  93.     n = 7
  94.     arr = [(0, 1), (0, 3), (1, 3), (2, 3), (3, 4), (4, 5), (4, 6), (5, 6)]
  95.     adj = makeAdj(arr, n)
  96.     for i in getComponents(adj):
  97.         print(i)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement