 ! Copyright (C) 2010 Samuel Tardieu.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs heaps kernel math sequences sets shuffle ;
+USING: accessors assocs hash-sets heaps kernel math sequences sets shuffle ;
 IN: astar
 
 ! This implements the A* algorithm. See http://en.wikipedia.org/wiki/A*

: (init) ( from to astar -- )
    swap >>goal
    H{ } clone over astar>> (>>g)
    H{ } clone over astar>> (>>in-closed-set)
    H{ } clone >>origin
    H{ } clone >>in-open-set
    <min-heap> >>open-set

    (add-to-open-set) ;

: ?add-to-open-set ( node astar -- )
    2dup astar>> in-closed-set>> in? [ 2drop ] [ add-to-open-set ] if ;

: move-to-closed-set ( node astar -- )
    [ astar>> in-closed-set>> adjoin ] [ in-open-set>> delete-at ] 2bi ;

: get-first ( astar -- node )
    [ open-set>> heap-pop drop dup ] [ move-to-closed-set ] bi ;
