1
+
2
+ # DEGREES OF SEPARATION
3
+
4
+ # O(V + E) time, O(V) space
5
+ def degreesOfSeparation (friendsLists , personOne , personTwo ):
6
+ # Write your code here.
7
+ degrees , visited = {}, {}
8
+ findDegrees (friendsLists , personOne , degrees , visited , 0 )
9
+ getUnconnectedPeople (friendsLists , degrees )
10
+ countOne = 0
11
+ for person in degrees :
12
+ if degrees [person ] > 6 :
13
+ countOne += 1
14
+
15
+ print (degrees )
16
+ degrees , visited = {}, {}
17
+ findDegrees (friendsLists , personTwo , degrees , visited , 0 )
18
+ getUnconnectedPeople (friendsLists , degrees )
19
+ countTwo = 0
20
+ for person in degrees :
21
+ if degrees [person ] > 6 :
22
+ countTwo += 1
23
+ print (degrees )
24
+ if countOne < countTwo :
25
+ return personOne
26
+ elif countTwo < countOne :
27
+ return personTwo
28
+ else :
29
+ return ""
30
+
31
+ def findDegrees (friendsLists , person , degrees , visited , level ):
32
+ degrees [person ] = 0
33
+ queue = [(person , 0 )]
34
+ #visited = {person: True}
35
+ while queue :
36
+ current = queue .pop (0 )
37
+ #visited[current[0]] = True
38
+ level = current [1 ]
39
+ for friend in friendsLists [current [0 ]]:
40
+ if friend in visited :
41
+ continue
42
+ visited [friend ] = True
43
+ degrees [friend ] = level + 1
44
+ queue .append ((friend , level + 1 ))
45
+
46
+
47
+ def getUnconnectedPeople (friendsLists , degrees ):
48
+ for friend in friendsLists :
49
+ if friend not in degrees :
50
+ degrees [friend ] = float ("inf" )
0 commit comments