我正在尝试在Python在线评测系统中回答一个问题,但是我的程序超出了时间限制和内存限制。这个问题要求计算从起始节点到结束节点的所有路径数量。完整的问题说明可以在这里查看。
以下是我的代码:
import sys
lines = sys.stdin.read().strip().split('\n')
n = int(lines[0])
dict1 = {}
for i in xrange(1, n+1):
dict1[i] = []
for i in xrange(1, len(lines) - 1):
numbers = map(int, lines[i].split())
num1 = numbers[0]
num2 = numbers[1]
dict1[num2].append(num1)
def pathfinder(start, graph, count):
new = []
if start == []:
return count
for i in start:
numList = graph[i]
for j in numList:
if j == 1:
count += 1
else:
new.append(j)
return pathfinder(new, graph, count)
print pathfinder([n], dict1, 0)
代码的功能是从最后一个节点开始,通过探索所有相邻节点向上工作到顶部。我基本上制作了一种广度优先搜索算法,但它占用太多空间和时间。我该如何改进这个代码使其更有效率?我的方法是否错误,应该如何修复?