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