let laby () = [| "######"; ".....#"; "###..#"; "#....."; "#.#..#"; "..##.#"; ".#####" |];; let laby () = [| [|0|] |] ;; (laby()).(0).(0)<-4;; (laby());; let laby () = [| "0" |] ;; (laby()).(0).[0]<-'4';; (laby());; let vois laby (x,y) = it_list (fun ac (x,y) -> try (if laby.(y).[x]=`.` then (x,y)::ac else ac) with |_ -> ac) [] [(x-1,y);(x+1,y);(x,y+1);(x,y-1)] ;; let dfs (x,y) laby = let rec foo (x,y) = let vois = vois laby (x,y) in if laby.(y).[x] = `.` then begin laby.(y).[x] <- `v` ; do_list foo vois ; end in foo (x,y) ;; let accessible (x,y) (x',y') laby = dfs (x,y) laby ; laby.(y).[x]=`v` let do_dist_n laby prec dn = let do_case c = let vois = vois laby c in do_list (fun (x,y) -> laby.(y).[x] <- `m` ; prec.(y).(x) <- c) vois ; vois in flat_map do_case dn ;; let rec do_dist laby c prec = let a = do_dist_n laby prec c in if a <> [] then do_dist laby a prec ;; let plus_court laby c1 (x,y) = let p = (make_matrix (vect_length laby) (vect_length laby) (0,0)) in let rec remonte (x,y) = if (x,y) = c1 then [] else (x,y)::(print_int x ; print_string " " ; print_int y ; print_string "\n"; remonte p.(y).(x)) in do_dist laby [c1] p ; remonte (x,y) ;; plus_court (laby ()) (0,1) (0,6) ;;