ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代码测试

2021-10-21 08:33:16  阅读:177  来源: 互联网

标签:distance pq point 代码 numbers 测试 endp dis


import heapq
import sys
import math

sys.setrecursionlimit(10000)
INF = 0x3f3f3f3f

## 定义类
class Point:
    def __init__(self, x, y):
        self.x = float(x)
        self.y = float(y)

# 计算欧式距离
def get_distance(p1, p2):
    return math.sqrt(abs(p1.x - p2.x) ** 2 + abs(p1.y - p2.y) ** 2)


def dijkstra(G, start, endp):
    dis = dict((point, INF) for point in G)
    dis[start] = 0.00
    vis = dict((point, False) for point in G)
    # heap
    pq = []
    heapq.heappush(pq, [dis[start], start])
    path = dict((point, [start]) for point in G)
    while len(pq) > 0:
        v_dis, v = heapq.heappop(pq)
        if vis[v] == True:
            continue
        vis[v] = True
        p = path[v].copy()
        for point in G:
            distance = get_distance(v, point)
            if distance > 100.00:
                continue
            new_dis = dis[v] + distance

            if new_dis < dis[point] and (not vis[point]):
                dis[point] = new_dis

                heapq.heappush(pq, [dis[point], point])
                temp = p.copy()
                temp.append(point)
                path[point] = temp
    distance = dis[endp]
    if distance == INF:
        print("-1")
    else:
        print("{:.2f}".format(distance))


while True:
    try:
        numbers = input().strip().split(",") # 根据','进行分割
        limit = int(numbers[0])
        point_list = []
        numbers = list(map(float, numbers))
        stap = Point(numbers[1], numbers[2])
        endp = Point(numbers[-2], numbers[-1])
        if stap.x > limit or stap.y > limit or stap.x < 0 or stap.y < 0:
            print("-1")
        elif endp.x > limit or endp.y > limit or endp.x < 0 or endp.y < 0:
            print("-1")
        else:
            for i in range(1, len(numbers), 2):
                if numbers[i] <= limit and numbers[i + 1] <= limit:
                    point_list.append(Point(numbers[i], numbers[i + 1]))
            dijkstra(point_list, point_list[0], point_list[-1])
    except EOFError:
        break

标签:distance,pq,point,代码,numbers,测试,endp,dis
来源: https://www.cnblogs.com/CharlesLC/p/15431685.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有