第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)

求求三连。。。

Logo

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

更多推荐