# 图论基础及遍历算法

# 797. 所有可能的路径 (opens new window)

/**
 * @param {number[][]} graph
 * @return {number[][]}
 */
var allPathsSourceTarget = function (graph) {
  const res = []
  const path = []
  const n = graph.length
  const traverse = (graph, s) => {
    // 添加路径
    path.push(s)
    // 得到结果
    if (s === n - 1) {
      // js特性 引用传值
      res.push([...path])
    }
    // 多叉树遍历框架
    for (let v of graph[s]) {
      traverse(graph, v)
    }
    path.pop()
  }

  traverse(graph, 0)

  return res
}

::: Tip 判断有环 添加 visible 记录是否已经走过 :::