我有一个包含起点和终点的广场,也是我不能去的地方。我的计划必须找到达到目标的方法:
ar_galima([], _, _):-!.
ar_galima([Prad|Galas],Kelias, X) :- not(Prad == X), not(member(X, Kelias)), ar_galima(Galas, Kelias, X).
gener(Stac_M, Stac_K, k(A,B), k(Y,B)) :- Y is A + 1, Y > 0, Y =< Stac_M, B =< Stac_K.
gener(Stac_M, Stac_K, k(A,B), k(Y,B)) :- Y is A - 1, Y > 0, Y =< Stac_M, B =< Stac_K.
gener(Stac_M, Stac_K, k(A,B), k(A,Y)) :- Y is B + 1, Y > 0, Y =< Stac_K, A =< Stac_M.
gener(Stac_M, Stac_K, k(A,B), k(A,Y)) :- Y is B - 1, Y > 0, Y =< Stac_K, A =< Stac_M.
paieska(_, _,_,Tikslas,Tikslas,[], _):-!.
paieska(Stac_M, Stac_K, Draudziama, Prad, Tikslas, [K|Kelias], Kelias2) :-
gener(Stac_M, Stac_K, Prad, K), ar_galima(Draudziama, Kelias2, K),
paieska(Stac_M, Stac_K, Draudziama, K, Tikslas, Kelias, [K|Kelias2]).
trasa(Ilgis, Aukstis, Draudziama, k(X,Y), Tikslas, Kelias) :-
paieska(Ilgis,Aukstis, Draudziama, k(X,Y), Tikslas,Kelias, []).
我找到完成的路线,现在我不知道将路线(列表)输出到终端的二维表中(好吧,路线的简单图形显示)。
要输出的列表示例:X = [k(2, 1), k(3, 1), k(4, 1), k(4, 2), k(4, 3), k(4, 4)] ;
有人建议我如何将2维表格输出到终端?
修改
应该打印 X
:
+ + + *
+ + + *
+ + + *
+ * * *
print perdicate可能如下所示:
printTable(N,M,X): - ...
其中N是行数,M是列数,X是坐标列表。
答案 0 :(得分:1)
你可以这样做:
print_table(H, W, L):-
succ(W, W1),
print_table(4, 1, H, W1, L).
print_table(1, W, _, W, _):- !.
print_table(Y, W, H, W, L):-
succ(NY, Y),
nl,
!,
print_table(NY, 1, H, W, L).
print_table(Y, X, H, W, L):-
(member(k(X, Y), L)->C='* ';C='+ '),
write(C),
succ(X, NX),
!,
print_table(Y, NX, H, W, L).