【发布时间】:2015-03-22 02:57:32
【问题描述】:
我编写了一个序言程序来解决和显示数独之类的谜题的解决方案。起初,如果网格是例如,我使用了类似的东西。 4x4:
main:-
Matrix = [[_,_,_,_],[_,_,_,_],[_,_,_,_],[_,_,_,_]],
solve_puzzle(Matrix),
display_matrix(Matrix).
但我希望能够设置矩阵的大小,所以我写了这个:
generate_list(N, [ ]) :-
N =< 0, !.
generate_list(N, [_ | T]) :-
N > 0,
N2 is N - 1,
generate_list(N2, T).
generate_matrix(_, N, []) :-
N =< 0, !.
generate_matrix(M, N, [R|T]) :-
generate_list(M,R),
N2 is N - 1,
generate_matrix(M, N2, T).
然后我可以这样做:
main:-
Rows = 4, Columns = 4,
generate_matrix(Columns,Rows,Matrix),
solve_puzzle(Matrix),
display_matrix(Matrix).
但这似乎减慢了我的程序。有没有更好的方法来生成 N x M 矩阵?
【问题讨论】:
-
如果你想创建一个给定大小的列表,
N,只需使用length(List, N)。 -
奇怪的是,由于这段代码,您应该能够注意到(甚至衡量)您的程序变慢。你能显示你得到的时间吗?
-
@Boris 提出了一个很好的观点。您是在创建大量的小矩阵,还是创建一个或几个非常大的矩阵?还是很多大的? :)