Python-算法思维-4.2递归与分治2:平面最小点对
第1关:平面最小点对本关任务:给定二维平面中n个点的坐标(整数),找出距离最近的2个坐标点之间的距离,n<=10000。import mathn = eval(input())A=[]for i in range(n):x,y= map(int, input().split())A.append((x,y))def Distance(a, b):return math.sqrt((a[0]-
·
第1关:平面最小点对
本关任务:给定二维平面中n个点的坐标(整数),找出距离最近的2个坐标点之间的距离,n<=10000。
import math
n = eval(input())
A=[]
for i in range(n):
x,y= map(int, input().split())
A.append((x,y))
def Distance(a, b):
return math.sqrt((a[0]-b[0])**2+(a[1]-b[1])**2)
#求[low..high]区间内的最小点距
def FidMin(A,low,high):
########## begin ##########
# 请在此填写代码,返回区间[low,high]的最小点距
m=10**10
for i in range(n):
a=A[i]
for z in range(i+1,n):
d=A[z]
l=Distance(a, d)
if l==0:
continue
elif l<m:
m=l
if m==10**10:
return(0)
else:
return(m)
########## end ##########
A.sort()
result=FidMin(A,0,len(A)-1)
print('%.3f' % result)
第2关:平面最小点对(两组坐标)
本关任务:给定二维平面中2n个点的坐标(整数),前n个点属于第一组,后n个点属于第二组,找出分别属于两个组,且距离最近的2个坐标点之间的距离,n<=10000。
import math
n = eval(input())
A=[]
for i in range(n*2):
group = 1 if i<n else 2
x,y= map(int, input().split())
A.append((x,y,group))
def Distance(a, b):
return math.sqrt((a[0]-b[0])**2+(a[1]-b[1])**2)
#求[low..high]区间内的最小点距
def FidMin(A,low,high):
########## begin ##########
# 请在此填写代码,返回区间[low,high]的最小点距,且这两点属于不同的组
m=1000000
for i in range(low,high):
if A[i][2]==1:
for a in range(low,high):
if A[a][2]==2:
d=Distance(A[i],A[a])
if d==0:
continue
elif d<m:
m=d
if m==1000000:
m=0
return(m)
########## end ##########
A.sort()
result=FidMin(A,0,len(A)-1)
print('%.3f' % result)
求求三连。。。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)