Prolog 点间最小距离

Prolog 点间最小距离,prolog,Prolog,假设我有一个由N行和N列组成的矩阵。我们取N=5。我如何制作一个.pl程序,返回一个N个随机对的列表,其中任意对之间的距离最小为2?一对是(i,j)形式,其中i表示元素的行,j表示元素的列。我做了距离函数: dist(X1, Y1, X2, Y2, D) :- D is round(sqrt((X2 - X1)**2 + (Y2 - Y1)**2)). 主视图应如下所示: ?- L = [] ?- make_list(L). L = [pair(5,5), pair(1,1), p

假设我有一个由N行和N列组成的矩阵。我们取N=5。我如何制作一个.pl程序,返回一个N个随机对的列表,其中任意对之间的距离最小为2?一对是(i,j)形式,其中i表示元素的行,j表示元素的列。我做了距离函数:

dist(X1, Y1, X2, Y2, D) :-  
    D is round(sqrt((X2 - X1)**2 + (Y2 - Y1)**2)).
主视图应如下所示:

?- L = []
?- make_list(L).
L = [pair(5,5), pair(1,1), pair(3, 3), pair(1,5), pair(5, 1)]

你能给我一些有用的代码或至少一些想法吗?

我建议使用以下伪代码

  • 获取所有有效对的列表-使用注释中建议的规则,例如
    findall/3
  • 计算列表长度-使用
    lenght/2
  • 选择随机列表项-如中所述

  • 这应该可以很好地工作:)试试看,它非常简单。

    首先-您将如何表示该矩阵?很抱歉忽略了这一点。。。我会硬编码它们,像这样:矩阵(1,1)。矩阵(1,2)。。。。。。。。。。。。。。。。。。矩阵(5,4)。矩阵(5,5)。对不起,我看不出这个表示法将如何定义5x5矩阵。它必须包含25个值。简而言之,
    矩阵(X,Y):-between(1,5,X),between(1,5,Y)。
    (X2-X1)^2+(Y2-Y1)^2>=2^2
    是一个更好的测试