雄辩的Javascript版本1第7章最短路径

雄辩的Javascript版本1第7章最短路径,javascript,search,recursion,shortest-path,Javascript,Search,Recursion,Shortest Path,解决办法: 解决方案找到了从到的所有可能路径。findrootes函数递归,对于每个成功的路径:ifend==返回[route]。最终输出是一个路由对象数组 如果我们只返回一个路由对象,那么这个路由对象数组来自哪里?我们为什么不声明var routes=[];路线。按[路线];。程序如何知道在一个大数组中输出路由对象?引用您链接到的文档:我们需要的另一个功能是展平。这个函数获取一个数组,并将数组的元素放在一个大数组中。谢谢Chris,我看到了。但是,代码不是返回[route]还是返回flatte

解决办法:

解决方案找到了从到的所有可能路径。findrootes函数递归,对于每个成功的路径:ifend==返回[route]。最终输出是一个路由对象数组


如果我们只返回一个路由对象,那么这个路由对象数组来自哪里?我们为什么不声明var routes=[];路线。按[路线];。程序如何知道在一个大数组中输出路由对象?

引用您链接到的文档:我们需要的另一个功能是展平。这个函数获取一个数组,并将数组的元素放在一个大数组中。谢谢Chris,我看到了。但是,代码不是返回[route]还是返回flatten。。。。如果结束!=去?芬杜洛特人去了,是的。我不明白这个问题。FindLotes会递归,每次找到一条与end==相交的路径时,它都会返回[route]。当我们返回的只是一个对象,而没有将该对象推到更大的数组中时,最终输出如何成为每个路由的数组?我看到了展平,但我看不到它是如何与将route对象推入最终数组相连接的。谢谢你的时间,我现在明白了。我不应该在凌晨三点问问题。。。谢谢你的帮助。
function possibleRoutes(from, to) {
  function findRoutes(route) {
    function notVisited(road) {
      return !member(route.places, road.to);
    }
    function continueRoute(road) {
      return findRoutes({places: route.places.concat([road.to]),
                         length: route.length + road.distance});
    }

    var end = route.places[route.places.length - 1];
    if (end == to)
      return [route];
    else
      return flatten(map(continueRoute, filter(notVisited,
                                               roadsFrom(end))));
  }
  return findRoutes({places: [from], length: 0});
}