我想找到迷宫下面的路径
1 2 3 4 5 6 7 8 9
+-----------------+
1 |. . . . . . . x .|
2 |x x . x x . . . .|
3 |. . . x . . x . x|
4 |. . . x . . x x x|
5 |. x . . . . . . .|
+-----------------+
下面的查询失败,我的代码哪里错了?
?- solve_maze(5, 9, [1/8, 2/1, 2/2,
2/4, 2/5, 3/4, 3/7, 3/9, 4/4, 4/7, 4/8, 4/9, 5/2], 3/2, 2/6, Path).
false.
maze_size(5, 9).
barrier(Nodes):-
member(X,Nodes), generate(X,X0,Y0), barrier(X0,Y0).
barrier(_,_).
goal(2/6).
move_cyclefree(Visited, Node,NextNode) :-
%available_move(Node, NextNode),
%split_string(Node, "/","",[K,B]),
%atom_number(K, X0),atom_number(B, Y0),
generate(Node,X0,Y0),
available_tile([X0,Y0]),
available_move(Node, NextNode),
\+ member(NextNode, Visited).
path(Node, Node, [Node]).
path(Node, LastNode,Path) :-
path(Node, SecondToLastNode, SecondToLastPath),
move_cyclefree(SecondToLastPath, SecondToLastNode, LastNode),
append(SecondToLastPath, [LastNode], Path).
solve_iterative_deepening(Node,To,Path) :-
path(Node, To, Path),
goal(To).
%% True if moving from [X0, Y0] to [X1, Y1] is valid
available_move(Node, NextNode) :-
generate(Node,X0,Y0), generate(NextNode,X1,Y1),
%split_string(Node, "/","",[K,B]),
split_string(NextNode, "/","",[K2,B2]),
%atom_number(K, X0),atom_number(B, Y0),atom_number(K2, X1),atom_number(B2, Y1),
adj_tile([X0,Y0], [X1,Y1]), %geitwniko tetragwnaki
%% available_tile(X0,Y0),
available_tile(X1,Y1).
%% True if tile is inside the maze
inside_maze(X1,Y1) :-
maze_size(A,B),
X1>=1,
X1=<A,
Y1>=1,
Y1=<B.
%% True tile can be used in a path
available_tile([X,Y]) :-
available_tile(X,Y).
available_tile(X,Y) :-
%split_string(Node, "/","",[K,B]),
%atom_number(K, X0),atom_number(B, Y0),
inside_maze(X,Y),
\+ barrier(X,Y).
%% True if [X0, Y0] is adjacent to [X1, Y1]
adj_tile([X0,Y0], [X0,Y1]) :-
(Y1 is Y0-1).
adj_tile([X0,Y0], [X1,Y0]) :-
(X1 is X0-1).
adj_tile([X0,Y0], [X0,Y1]) :-
(Y1 is Y0+1).
adj_tile([X0,Y0], [X1,Y0]) :-
(X1 is X0+1).
generate([X1/Y1],X,Y) :-
member(X1, [1,2,3,4,5]), member(Y1, [1,2,3,4,5,6,7,8,9]),
X is X1, Y is Y1.
solve_maze(M,N,Barriers,From,To,Path):-
maze_size(M,N),
barrier(Barriers),
solve_iterative_deepening(From,To,Path).