博客
关于我
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/

    你可能感兴趣的文章
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    MTTR、MTBF、MTTF的大白话理解
    查看>>