N—E—E 2022-02-05 10:14 采纳率: 59.5%
浏览 41
已结题

pta哈利波特的考试(数据结构7-8)后两个测试集为什么过不了?

问题遇到的现象和发生背景

题目:

img

img


6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80

这种大数据量的实在不知道怎么测试了

问题相关代码,请勿粘贴截图
infinity = float('inf')

class mgragh:
    def __init__(self,n,m) -> None:
        self.mgragh = [[infinity for i in range(n+1)] for j in range(n+1)]
        self.edgenum = m
        self.vernum = n

    # 读取邻接矩阵
    def readmat(self)->None:
        for i in range(self.edgenum):
            v1, v2, weight = map(int, input().split())
            self.mgragh[v1][v2] = weight
            self.mgragh[v2][v1] = weight
    
    # floyd算法
    def floyd(self)->list[list[int]]:
        # 初始化dist矩阵
        dist = [[infinity for i in range(self.vernum+1)] for j in range(self.vernum+1)]
        for i in range(1,self.vernum+1):
            for j in range(1,self.vernum+1):
                if self.mgragh[i][j] < infinity:
                    dist[i][j] = self.mgragh[i][j]
        # floyd
        for i in range(1,self.vernum+1):
            for j in range(1,self.vernum+1):
                for k in range(1,self.vernum+1):
                    if dist[i][k]+dist[k][j] < dist[i][j]:
                        dist[i][j] = dist[i][k] + dist[k][j]
        return dist
    
    # 求最长距离的最小值
    def judge(self,D:list[list[int]]):
        ans:int = 0
        max_dist = 0
        final_dist = infinity
        for subans in range(1,self.vernum+1):
            max_dist = 0
            for j in range(1,self.vernum+1):
                if j == subans:
                    continue
                #if D[subans][j] == infinity:
                #    break
                if D[subans][j] > max_dist: max_dist=D[subans][j]
            if max_dist != infinity:
                if max_dist < final_dist:
                    ans = subans
                    final_dist = max_dist
        if ans == 0: print(ans)
        else: print("{} {}".format(ans,final_dist))   


if __name__ == '__main__':
    n,m = map(int, input().split())
    g = mgragh(n,m)
    g.readmat()
    dist = g.floyd()
    #print(dist)
    g.judge(dist)
            





运行结果及报错内容

img

  • 写回答

4条回答 默认 最新

  • 「已注销」 2022-02-06 01:53
    关注

    img

    代码有两个问题,第一个就是Floyd中k,k代表的意义你没有理解,应该放在最外层循环。第二个就是你取最大值的时候初始化的也设置inf,遍历的时候也应该记录一下下标,只需要维护最大值和下标就行了,下面的第二个if循环显得没必要

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月5日

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了