include c:\cxpl\codes; \intrinsic 'code' declarations proc ClosestPair(P, N); \Show closest pair of points in array P real P; int N; real Dist2, MinDist2; int I, J, SI, SJ; [MinDist2:= 1e300; for I:= 0 to N-2 do [for J:= I+1 to N-1 do [Dist2:= sq(P(I,0)-P(J,0)) + sq(P(I,1)-P(J,1)); if Dist2 < MinDist2 then \squared distances are sufficient for compares [MinDist2:= Dist2; SI:= I; SJ:= J; ]; ]; ]; IntOut(0, SI); Text(0, " -- "); IntOut(0, SJ); CrLf(0); RlOut(0, P(SI,0)); Text(0, ","); RlOut(0, P(SI,1)); Text(0, " -- "); RlOut(0, P(SJ,0)); Text(0, ","); RlOut(0, P(SJ,1)); CrLf(0); ]; real Data; [Format(1, 6); Data:= [[0.654682, 0.925557], \0 test data from BASIC examples [0.409382, 0.619391], \1 [0.891663, 0.888594], \2 [0.716629, 0.996200], \3 [0.477721, 0.946355], \4 [0.925092, 0.818220], \5 [0.624291, 0.142924], \6 [0.211332, 0.221507], \7 [0.293786, 0.691701], \8 [0.839186, 0.728260]]; \9 ClosestPair(Data, 10); ]