/
main.py
64 lines (54 loc) · 1.78 KB
/
main.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8 -*-
import wikipedia
from collections import deque
def main():
def userInput():
def verifyInput(prompt):
while True:
title = raw_input(prompt)
try:
wikipedia.page(title).load()
except wikipedia.PageError:
print "Not a page"
continue
except wikipedia.DisambiguationError:
print "Don't use disambiguation pages"
continue
return title
start = verifyInput("Start article:\t")
target = verifyInput("Target article:\t")
return start, target
def seek(start, target):
prev_table = dict()
prev_table[start] = None
def backtrace(link, li):
li.append(link)
prev = prev_table[link]
if prev is None:
return li[::-1]
return backtrace(prev, li)
level = 0
queue = deque()
queue.append((start,0))
while queue:
current = queue.popleft()
if current[1] > level:
print
level = current[1]
print ".",
try:
for link in wikipedia.page(current[0]).links:
if link not in prev_table.keys():
prev_table[link] = current[0]
queue.append((link, level+1))
if link == target:
return backtrace(link, [])
except wikipedia.DisambiguationError, wikipedia.PageError:
continue
return ["No path found"]
start, target = userInput()
path = seek(start, target)
print
print " -> ".join(path)
if __name__ == "__main__":
main()