在2d网格中生成单向路径

时间:2016-03-02 11:17:32

标签: algorithm lua

我需要解决问题的方法。我想在Lua的3x3网格中随机生成路径。路径必须是一条路,而不是两次穿过同一点。

网格:

enter image description here

守则:

math.randomseed( os.time())

moves={ {2,4},{1,5,3},{6,2},{1,5,7},{2,6,8,4},{3,5,9},{4,8},{7,5,9},{8,6} }

history_moves={}

last=0
start=1
print("first move: "..start)
table.insert(history_moves,start)

for a=1,6 do
  if a==1 then
    which_element=moves[start][ math.random(1,#moves[start]) ]
    print(which_element)
    last=which_element
    table.insert(history_moves,which_element)
  else 

    which_table=moves[which_element]
    which_element=which_table[ math.random(1,#which_table) ]
    print(which_element)
    last=which_element
    table.insert(history_moves,which_element)

  end
end

moves包含每个点的可能方向(moves[1]用于第1点等。)

以上代码段将生成一个路径,从 1 点开始,并创建以下内容:

 1 4 7 4 7 8 5

翻译成:

enter image description here

问题在于路径是否按指示使用,即点47

我试图将过去的观点包含在history_moves中,但我不知道如何利用它。

期望的结果将是例如:

1 4 7 8 5 6 9

任何帮助或想法?我可能在这里重新发明轮子,但我的算法知识有限。

1 个答案:

答案 0 :(得分:1)

您可以将所有使用的点放在数组import re addresses = set() pattern = re.compile(r'[-=]> +(\w{1,}@\w{1,}\.\w{2,3})') with open('test.txt', 'r') as f: for line in f: match = pattern.search(line) if match: addresses.add(match.groups()[0]) for address in sorted(addresses): print(address) 中,并在选择新点时检查该数组。

如果所选点已在usedPoints数组中,请选择其他点,否则,请选择该点并将其添加到usedPoints