我有一个结构如下的列表:
0 ; (0,0,G) ; []
1 ; (9,0,B) ; []
2 ; (9,9,R) ; []
3 ; (-1,-1,E) ; []
4 ; (-1,-1,E) ; []
5 ; (-1,-1,E) ; []
6 ; (-1,-1,E) ; []
7 ; (-1,-1,E) ; []
8 ; (-1,-1,E) ; []
列表中的每个项目都有一个索引,一个元组和附近邻居的列表,其中包含邻居的索引。
我的搜索从索引1或索引2开始,我需要从它们到索引0的所有路径。此外,我还需要一个列表,其中包含该路径上的所有索引。
我已经使用递归来实现这一点,并且正在使用全局可变变量(blueChains)来存储所有可能的路径。我想在不使用全局变量的情况下执行相同的操作,但是我希望函数返回所有路径的列表,因为这会导致代码其他部分出现问题。
这是我的函数的外观:
let rec traverseBlue index visited =
match index with
| 0 ->
let newVisited = 0 :: visited
blueChains <- newVisited :: blueChains
printfn "Golden Cog Reached! Blue wins the game!"
currentGameStatus <- WonByB
| ind ->
if not (List.contains ind visited) then
let newVisited = ind :: visited
blueChains <- newVisited :: blueChains
printfn "INDEX: %i VISITED: %A" ind newVisited
for i in tree.[ind].connectedNodes do
traverseBlue i newVisited
我得到的输出是:
INDEX: 1 VISITED: [1]
INDEX: 3 VISITED: [3; 1]
BLUE CHAINS : [[1]; [1; 3]]
我想为蓝链获得相同的值,但不使用全局变量
答案 0 :(得分:1)
这是我终于通过@glennsl解决了我的问题后所做的事情。
let rec traverseBlue index visited oldBlueChains =
let mutable blueChains = []
match index with
| 0 ->
let newVisited = 0 :: visited
blueChains <- newVisited :: oldBlueChains
printfn "Golden Cog Reached! Blue wins the game!"
currentGameStatus <- WonByB
blueChains
| ind ->
if not (List.contains ind visited) then
let newVisited = ind :: visited
blueChains <- newVisited :: oldBlueChains
printfn "INDEX: %i VISITED: %A" ind newVisited
for i in tree.[ind].connectedNodes do
blueChains <- (traverseBlue i newVisited blueChains) @ blueChains