我需要解决问题的方法。我想在Lua的3x3网格中随机生成路径。路径必须是一条路,而不是两次穿过同一点。
网格:
守则:
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
翻译成:
问题在于路径是否按指示使用,即点4
和7
我试图将过去的观点包含在history_moves
中,但我不知道如何利用它。
期望的结果将是例如:
1 4 7 8 5 6 9
任何帮助或想法?我可能在这里重新发明轮子,但我的算法知识有限。
答案 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
。