假设我只跟随对:
[
{
"from": "AUD",
"rate": "0.5",
"to": "USD"
},
{
"from": "USD",
"rate": "0.5",
"to": "EUR"
},
{
"from": "EUR",
"rate": "0.5",
"to": "GBP"
},
{
"from": "GBP",
"rate": "2",
"to": "EUR"
},
{
"from": "EUR",
"rate": "2",
"to": "USD"
},
{
"from": "USD",
"rate": "2",
"to": "AUD"
}
]
我需要将澳元兑换成英镑。 算法应该找到使用现有对的路径:AUD - >美元 - > EUR - > GBP。
在查看这个问题后,我认为它可以通过递归来解决,但仍然没有找到正确的方法来做到这一点。 在这种情况下,我应该从GBP开始向后看吗? 或者不需要递归,我可以向后迭代并向堆栈添加值,而我却找不到合适的值?
答案 0 :(得分:1)
这是depth-first search或breadth-first search的工作。你不需要需要递归,但你可以根据需要使用它 - 深度优先搜索使用堆栈,递归将是一种使用调用堆栈的方式。请注意,广度优先搜索会为您提供最短转换路径。深度优先搜索可能不会。
无论您选择哪种搜索策略,您都将根据可用的转化数量建立从货币到货币的可能路径。向路径添加其他转换步骤时,请确保将转化过滤为之前在路径中使用过的货币,这样就不会在路径中获得循环。 (例如,转换USD-> EUR-> USD-> EUR->等会让深度优先搜索永久停滞。)
您可以从任何一种货币开始,向两个方向工作;你会找到一个有效的路径以太途径。