Определить номера точек, расстояние между которыми минимальное - Visual Basic .NET
Формулировка задачи:
Подскажите
Заданы координаты N точек в пространстве.
Необходимо определить номера точек, расстояние между которыми минимальное
Решение задачи: «Определить номера точек, расстояние между которыми минимальное»
textual
Листинг программы
Private Structure pnt
Public x As Integer
Public y As Integer
Public z As Integer
Public Sub New(ByVal xx As Integer, ByVal yy As Integer, ByVal zz As Integer)
x = xx
y = yy
z = zz
End Sub
End Structure
Private Structure dst
Public s As Integer
Public nm1 As Integer
Public nm2 As Integer
Public Sub New(ByVal ss As Integer, ByVal nn1 As Integer, ByVal nn2 As Integer)
s = ss
nm1 = nn1
nm2 = nn2
End Sub
End Structure
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
'моделируем точки
Dim rnd As New Random
Dim n As Integer = 100
Dim pp(n - 1) As pnt
For i = 0 To n - 1
pp(i) = New pnt(rnd.Next(0, 1001), rnd.Next(0, 1001), rnd.Next(0, 1001))
Next
'определяем расстояния
Dim dist As New List(Of dst)
Dim distance = Function(p1 As pnt, p2 As pnt) As Integer
Return CInt(Math.Sqrt((p1.x - p2.x) ^ 2 + (p1.y - p2.y) ^ 2 + (p1.z - p2.z) ^ 2))
End Function
For i = 0 To n - 2
For j = i + 1 To n - 1
dist.Add(New dst(distance(pp(i), pp(j)), i, j))
Next
Next
'сортируем в порядке возрастания и находим min/max
Dim srt(dist.Count - 1) As Integer
For i = 0 To dist.Count - 1
srt(i) = dist(i).s
Next
Dim ar() As dst = dist.ToArray
Array.Sort(srt, ar)
MsgBox("min S = " & ar(0).s & " n1 = " & ar(0).nm1 & " n2 = " & ar(0).nm2 & vbCrLf & _
"max S = " & ar(ar.Length - 1).s & " n1 = " & ar(ar.Length - 1).nm1 & " n2 = " & ar(ar.Length - 1).nm2)
End Sub