【发布时间】:2019-02-14 13:03:33
【问题描述】:
我们将使用图表和两个玩家。在这个连通图中,获胜条件是第二个玩家没有其他路径可走。问题是一旦玩家选择了一条路径,就不能再选择了。
让我们假设初始输入是邻接表 (x,y) 意味着 x 有到 y 的路径
我们的目标是返回一组顶点,玩家 1 可以选择这样它总是会获胜。
例如,如果我有 [(1,2), (2,0), (0, 3), (3,2)] 并且玩家 1 开始,那么我们应该返回 [1, 0, 3]。我们无法返回2:
2 --> 玩家 1 从这里开始
(2,0) --> 玩家 2 去 0
(0,3) --> 玩家 1 去 3
(3,2) --> 玩家 2 去 2
(2,0) --> 玩家 1 不能去这里,已经被占领了
already_visited = []
turn = 1
result = []
def findStarting(L):
global already_visited
global turn
global result
for x,y in L:
allowed = can_visit(L, y) # function tell me which I can visit safely
turn = (turn % 2) + 1 # increment the turn
already_visited.append((x,y)) # we visited this edge
res = findStarting([(x, y)]) # recursive call (search on this node for paths)
if (turn == 2): return True
def can_visit(L, y):
res = []
for a,b in L: if (a==y and (a,b) not in already_visited): res.append((a,b))
return res
我在递归情况下遇到了麻烦。我想我想要做的是返回True,如果我们到达一个转折点并且玩家没有他们可以走的路径,但我不知道如何从这里继续前进
【问题讨论】:
标签: python algorithm recursion graph geography