Skip to content

Instantly share code, notes, and snippets.

@ewmson
Created October 23, 2017 20:19
Show Gist options
  • Save ewmson/3418fffb162dc19184645aa0675a70c2 to your computer and use it in GitHub Desktop.
Save ewmson/3418fffb162dc19184645aa0675a70c2 to your computer and use it in GitHub Desktop.
n = int(raw_input())
adj = {}
files = raw_input().split()
for file in files:
adj[file] = set()
for _ in xrange(n):
name, k = raw_input().split()
k = int(k)
for _ in xrange(k):
line = raw_input()
line = line[len('import '):]
deps = line.split(', ')
for dep in deps:
dep = dep.strip()
adj[name].add(dep)
from collections import deque
def bfs(node):
prev = {}
q = deque()
q.append((node,0))
def path(prevv):
l = [prevv]
while prev[prevv] != node:
l.append(prev[prevv])
prevv = prev[prevv]
if node not in l:
l.append(node)
return l
while len(q) > 0:
n, lenn = q.popleft()
#print(n, lenn, prev)
#if n == node and lenn > 0:
#return True, xrange(lenn)
# return True, path(prevv)
#if n in prev:
# continue
#prev[n] = prevv
if lenn >= m:
return False, []
for nei in adj[n]:
if nei in prev:
continue
prev[nei] = n
if nei == node:
return True, path(nei)
q.append((nei,lenn+1))
return False, []
big = 99999999
m = big
m_path = []
f2 = files[:]
#import random
#random.shuffle(f2)
for file in f2:
valid, path = bfs(file)
if valid:
if m > len(path):
m = len(path)
m_path = path
if m == big:
print('SHIP IT')
else:
print(' '.join(reversed(m_path)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment