type position = Plain | Water | Wall | Home type board = position array array type location = int * int let find_home board = let ans = ref (-1,-1) in for i=0 to Array.length board - 1 do for j=0 to Array.length board.(0) - 1 do if board.(i).(j) = Home then ans := (i,j) done done; !ans (* returns all valid neighboring positions which are not water or wall *) let compute_neighbors board (i,j) = let r = Array.length board in let c = Array.length board.(0) in let ns = [(i,j-1); (i,j+1); (i-1,j); (i+1,j)] in let valid_ns = List.filter (fun (x,y) -> x>=0 && x=0 && y board.(x).(y) = Plain || board.(x).(y) = Home) valid_ns let b1 = let b = Array.make_matrix 5 7 Plain in b.(2).(1) <- Home; b.(0).(5) <- Water; b.(1).(5) <- Water; b.(2).(5) <- Water; b.(0).(3) <- Wall; b.(1).(3) <- Wall; b.(2).(3) <- Wall; b let b2 = let b = Array.make_matrix 5 7 Plain in b.(2).(1) <- Home; b.(1).(5) <- Water; b.(2).(5) <- Water; b.(1).(3) <- Wall; b.(2).(3) <- Wall; b