点之间的最小距离

时间:2015-05-15 20:04:20

标签: 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), pair(3, 3), pair(1,5), pair(5, 1)]

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

1 个答案:

答案 0 :(得分:0)

我建议使用以下伪代码

  1. 获取所有有效对的列表 - 例如使用findall/3注释中建议的规则:)
  2. 计算列表长度 - 使用lenght/2
  3. 选择随机列表项 - 在the similar question
  4. 中描述

    这应该效果很好:)尝试一下,它非常简单。