院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

深さ優先探索 改良

意味がわかりやすいように若干改良

let depth_first_search = (start, goal) => {
  /* auxは 通ってきた道のり:list(int) と 現在地:int を受け取る */
  let rec aux = (curPos, pathList) =>
    switch (curPos == goal) {
    | true => [List.rev([curPos, ...pathList])]
    | _ =>
      curPos
      |> List.nth(adjacent)  /* 現在地からつながっているとこ取り出す */
      |> List.fold_left(     /* それぞれについて探索 & 合成して返す */
           (acc, el) =>
             List.mem(el, pathList) ?
               acc : acc @ aux(el, [curPos, ...pathList]),
           [],
         )
    };
  aux(start,[]);
};