将此程序中的所有可能路径返回到嵌套lis的算法

2024-05-19 11:31:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个带有函数findViableMoves(base)的游戏。如果我在一开始用参数base调用这个函数,我会得到一个输出[move1, move2 ... moven],它表示用户可以执行的所有n个可行的移动,并给出状态base。(实际上有两个根移动)

在执行移动时,比如说move2-base根据移动而改变,函数再次被调用,现在我们有了[move21,move22 .... move2n].findViableMoves(base)的输出

Depth-first-tree

如果你看这个图,情况非常相似-没有循环,它只是一个普通的树。我需要一个程序,执行深度优先搜索(我想?)在所有可能的移动上,给定开始状态base,然后以列表形式返回:

[[move1,move11,move111],[move1,move11,move112],....[moven,moven1,moven11],...]

这些列表中会有更多的元素(最多14个),但我想知道是否有人能提供一些提示,告诉我如何构建一个算法来实现这一点?效率对我来说并不重要,因为没有太多的途径,我只想现在就完成。你知道吗


Tags: 函数用户游戏列表base参数状态我会
1条回答
网友
1楼 · 发布于 2024-05-19 11:31:45

我不是100%清楚你在追求什么,但是如果你有一个列表或者类似的iterable,在循环发生的时候它正在改变,你可以尝试下面的方法。你知道吗

此示例允许列表和循环条件在循环执行期间保持动态。你知道吗

import random
import sys
import time

changing_list = ['A', 27, 0.12]

def perform_operation(changing_list, counter):
    sometimes_add_another_element_threshold = 0.6
    if random.random() > sometimes_add_another_element_threshold:
        changing_list.append(random.random())
    print(changing_list[counter])

def main(z=0):
    safety_limit = 100
    counter = 0
    condition = True
    while condition and counter < safety_limit:
        perform_operation(changing_list, counter)
        counter += 1
        condition = counter<len(changing_list)

    print("loop finished")


if __name__ == '__main__':
    start_time = time.time()
    main(int(sys.argv[1])) if len(sys.argv)>1 else main()
    print(time.time() - start_time)

提供不同长度的输出,如下所示:

A
27
0.12
0.21045788812161237
0.20230442292518247
loop finished
0.0058634281158447266

相关问题 更多 >

    热门问题