# Finding the closest pair of points

```#Compute the distance between towo points (x1, y1) and (x2, y2)
def distance(x1, y1, x2, y2):
return ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) ** 0.5

def nearestPoints(points):
# p1 and p2 are the indexws in the points list
p1, p2 = 0, 1 # Initial two points

shortestDistance = distance(points[p1][0], points[p1][1],
points[p2][0], points[p2][1]) # Initialize shortestDistance

#Compute distance between every two points
for i in range(len(points)):
for j in range(i + 1, len(points)):
d = distance(points[i][0], points[i][1],
points[j][0], points[j][1]) # Find distance

if shortestDistance > d:
p1, p2 = i, j  # Update p1, p2
shortestDistance = d # New shotestDistance

return p1, p2

def main():
numberOfPoints = eval(input("Enter the number pf points: "))

# Create a list to store points
points = []
print("Enter", numberOfPoints,"Points:", end= '')
for i in range(numberOfPoints):
point = 2 * [0]
point[0], point[1] = eval(input("Enter coordinates separated by a comma: "))
points.append(point)

# p1 and p2 are the indexes in the pont list

p1, p2 = nearestPoints(points)

# Display result
print("The closest two points are (" +
str(points[p1][0]) + ", "+ str(points[p1][1]) + ") and ("+
str(points[p2][0]) + ", "+ str(points[p2][1]) + ")")

main() # call the main function```

### GUI Solution

```from tkinter import  * # Import all definitions from tkinter

#Compute the distance between towo points (x1, y1) and (x2, y2)
def distance(x1, y1, x2, y2):
return ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) ** 0.5

def nearestPoints(points):
# p1 and p2 are the indexws in the points list
p1, p2 = 0, 1 # Initial two points

shortestDistance = distance(points[p1][0], points[p1][1],
points[p2][0], points[p2][1]) # Initialize shortestDistance

#Compute distance between every two points
for i in range(len(points)):
for j in range(i + 1, len(points)):
d = distance(points[i][0], points[i][1],
points[j][0], points[j][1]) # Find distance

if shortestDistance > d:
p1, p2 = i, j  # Update p1, p2
shortestDistance = d # New shotestDistance

return p1, p2

RADIUS = 2 # radius of the point

class NearestPointGUI:
def __init__(self):
self.points = [] # Store self.points
window = Tk() # Create a window
window.title("Find Nearest Points")  # Set title

self.canvas = Canvas(window, width = 400,  height = 200)
self.canvas.pack()

self.canvas.bind("<Button-1>", self.addPoint)

window.mainloop()  # Create an event loop

def addPoint(self, event):
if not  self.isTooCloseToOtherPoints(event.x, event.y):
self.addThisPoint(event.x, event.y)

def addThisPoint(self, x, y):
# Display this point
self.canvas.create_oval(x - RADIUS, y - RADIUS, x + RADIUS, y + RADIUS)
# Add this point to self.points list
self.points.append([x, y])
if len(self.points) > 2:
p1, p2 = self.nearestPoints(self.points)
self.canvas.delete("line")
self.canvas.create_line(self.points[p1][0],self.points[p1][1],
self.points[p2][0], self.points[p2][1], tags = "line")

def isTooCloseToOtherPoints(self, x, y):
for i in range(len(self.points)):
if self.distance(x, y, self.points[i][0], self.points[i][1]) <= RADIUS + 2:
return True

return False

# Compute the distance between two points (x1, y1) and (x2, y2)
def distance(self, x1, y1, x2, y2):
return ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) ** 0.5

def nearestPoints(self, points):
# p1 and p2 are the indexws in the points list
p1, p2 = 0, 1  # Initial two points

shortestDistance = distance(points[p1][0], points[p1][1],
points[p2][0], points[p2][1])  # Initialize shortestDistance

# Compute distance between every two points
for i in range(len(points)):
for j in range(i + 1, len(points)):
d = distance(points[i][0], points[i][1],
points[j][0], points[j][1])  # Find distance

if shortestDistance > d:
p1, p2 = i, j  # Update p1, p2
shortestDistance = d  # New shotestDistance

return p1, p2

NearestPointGUI() # Create GUI```