拯救007

不想学c++


java版本可以参考https://blog.csdn.net/qq_34115899/article/details/79579605
解决方案也可以参考上个博主,写的很清晰
python版本:

# import math
x=input().split(' ')
x = [int(x[i]) for i in range(len(x))]
N=x[0]
D=x[1]

Point = [[0]*2]*N
for i in range(N):
    Point[i] = input().split(' ')
    Point[i]=list(map(int, Point[i]))
# Point=[[4,13],[-13,12],[12,12],[-12,-12],[12,-12]]
lable=[0]*N
# 检测两条鳄鱼之间是否能够达到
def jump(i,j):
    return D*D>=pow((Point[i][0]-Point[j][0]),2)+pow((Point[i][1]-Point[j][1]),2)

def firstjump(i):
    if(pow((D+7.5),2)>=pow(Point[i][0],2)+pow(Point[i][1],2)):
        return True
    else:
        False


def isSafe(i):
    return ((D>=50-abs(Point[i][0]))|(D>=50-abs(Point[i][1])))
# 跳上第一条鳄鱼以后
def dfs(i):
    ans=0
    if(isSafe(i)):
        return 1
    else:
        for j in range(len(Point)):
            if((lable[j]==0)&(jump(j,i))):
                lable[j]=1
                ans=dfs(j)
                lable[j]=0
                if(ans==1):
                    break
    return ans

def sovle():
    ans=0
    for i in range(len(Point)):
        # 只有有跳上第一个鳄鱼的机会才能进行下面的操作
        if((lable[i]==0)&(firstjump(i))):
            lable[i]=1
            ans=dfs(i)
            # 没有回头机会
            if(ans==1):
                break
    if ans==1:
        print("Yes")
    else:
        print("No")

if (D >= 42.5):
    print("yes")
else:
    sovle()

你可能感兴趣的:(拯救007)