代码随想录算法训练营第六十二天|KamaCoder 97 小明逛公园,KamaCoder 127 骑士的攻击

1.KamaCoder 97 小明逛公园

题目链接:97. 小明逛公园

max_int = 10005
n, m = map(int, input().split())
grid = [[max_int] * (n + 1) for _ in range(n + 1)]
for _ in range(m):
    p1, p2, val = map(int, input().split())
    grid[p1][p2] = val
    grid[p2][p1] = val

for k in range(1, n + 1):
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            grid[i][j] = min(grid[i][j], grid[i][k] + grid[k][j])

z = int(input())
for _ in range(z):
    start, end = map(int, input().split())
    if grid[start][end] == max_int:
        print(-1)
    else:
        print(grid[start][end])

第一题结束

2.KamaCoder 127 骑士的攻击

题目链接:127. 骑士的攻击

import heapq

n = int(input())
moves = [(1, 2), (2, 1), (-1, 2), (2, -1), (1, -2), (-2, 1), (-1, -2), (-2, -1)]
def distance(a, b):
    return ((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2) ** 0.5
 
def bfs(start, end):
    q = [(distance(start, end), start)]
    step = {start: 0}
     
    while q:
        d, cur = heapq.heappop(q)
        if cur == end:
            return step[cur]
        for move in moves:
            new = (move[0] + cur[0], move[1] + cur[1])
            if 1 <= new[0] <= 1000 and 1 <= new[1] <= 1000:
                step_new = step[cur] + 1
                if step_new < step.get(new, float('inf')):
                    step[new] = step_new
                    heapq.heappush(q, (distance(new, end) + step_new, new))
    return False
                     
for _ in range(n):
    a1, a2, b1, b2 = map(int, input().split())
    print(bfs((a1, a2), (b1, b2)))

第二题结束

今天用时2h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值