博客
关于我
201403-4 无线网络 ccf
阅读量:264 次
发布时间:2019-03-01

本文共 2752 字,大约阅读时间需要 9 分钟。

????????????????????????????????????????????????????????????????????????k??????????????????

????

  • ??????????????????????????????????????????????????????????????????k???????????

  • ??????????????????????????????????????????????????r?

  • ???????BFS????BFS???????????????????????BFS?????????????????????????1?

  • ??????BFS????????????????????????????????k????????????????

  • ????

    import sys
    from collections import deque
    def main():
    n, m, k, r = map(int, sys.stdin.readline().split())
    nodes = []
    for _ in range(n):
    x, y = map(int, sys.stdin.readline().split())
    nodes.append((x, y))
    new_nodes = []
    for _ in range(m):
    x, y = map(int, sys.stdin.readline().split())
    new_nodes.append((x, y))
    # Encode all nodes
    all_nodes = nodes + new_nodes
    node_pos = [ (x,y) for (x,y) in all_nodes ]
    node_id = [i for i in range(len(all_nodes))]
    target_pos = node_pos[1] # node 1 is the second router
    # Create adjacency list
    adj = [[] for _ in range(len(all_nodes))]
    for i in range(len(all_nodes)):
    for j in range(i+1, len(all_nodes)):
    x1, y1 = node_pos[i]
    x2, y2 = node_pos[j]
    dx = x1 - x2
    dy = y1 - y2
    dist = dx*dx + dy*dy
    if dist <= r*r:
    adj[i].append(j)
    adj[j].append(i)
    # BFS setup
    INF = float('inf')
    distance = [ [INF]*(k+1) for _ in range(len(all_nodes)) ]
    start_pos = node_id[0] # position of first router
    distance[start_pos][0] = 0
    queue = deque()
    queue.append( (start_pos, 0) )
    found = False
    min_trans = INF
    while queue:
    pos, added = queue.popleft()
    if pos == node_id[1]: # reached the second router
    if added <=k:
    if distance[pos][added] < min_trans:
    min_trans = distance[pos][added]
    found = True
    continue
    if distance[pos][added] >= INF:
    continue
    for neighbor in adj[pos]:
    if neighbor < n: # original node
    new_added = added
    else: # new node
    if added >= k:
    continue
    new_added = added + 1
    new_dist = distance[pos][added] + 1
    if new_dist < distance[neighbor][new_added]:
    distance[neighbor][new_added] = new_dist
    queue.append( (neighbor, new_added) )
    print(min_trans if found else -1)
    if __name__ == "__main__":
    main()

    ????

  • ????????????????????????????
  • ???????????????????????????
  • BFS????????????????????????????????
  • BFS????????????????????????????
  • ??????????????????
  • ??????????????????????????????????????????????????????

    转载地址:http://wubx.baihongyu.com/

    你可能感兴趣的文章
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>