Advertisement
Guest User

Untitled

a guest
Dec 26th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. (def max-path-length 10)
  3.  
  4. (defn get-paths
  5.   ([current end] (get-paths current end [] 0))
  6.   ([current end path depth]
  7.      (if (= current end)
  8.        (concat path [current])
  9.        (let [neighbours (filter #(not (lazy-contains? (flatten path) %1))
  10.                                 (get-neighbours current))]
  11.          (if (or (= (count neighbours) 0)
  12.                  (>= depth max-path-length))
  13.            (concat path [nil])
  14.            (map (fn [item]
  15.                   (get-paths item end (concat path [current]) (+ depth 1)))
  16.                 neighbours))))))
  17.  
  18. (defn get-shortest-path [start end]
  19.   (apply min-key count
  20.          (filter #(and (seq? %1) (= (last %1) end))
  21.                  (tree-seq seq? seq (get-paths start end)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement