不想学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()