我目前正在做家庭作业,要求我:
实施DIJKSTRA的单源最短路径问题算法 与BINARY堆。运行时间应为O(ElogV)。
够简单!但是,必须通过代码解决问题。在此之前,这个概念仍然不是那么困难:
您的程序应该从文件中读取数据(参见下面的示例)并输出 单个数字=从节点0到节点的最短路径长度之和 每个节点。 INPUT FORMAT:下面每个文件的第一行包含 图中的顶点数和边数(在 格式" n = XXXX m = XXXXX")。文件的其余部分组织为 如下:每个顶点我自己出现在一条线上,然后是一个 i的每个邻居j> i的行(包含j和边缘的长度) (I,J))。每个邻居列表以空行结束。顶点i 哪个没有索引大于i的邻居不是 表示。注意:顶点索引从0到n-1。注意:每个 edge只有较小的数字端点SAMPLE才会被提及一次 INPUT: 1. first input 2. second input最短路径树的长度应分别为10721073和625349。程序应该在3-10中输出 第一次输入的秒数,第二次输入的秒数小于1秒。
我的问题:我不太了解教授对文件格式的解释以及它们应如何在代码中翻译。我也不了解我应该想象的图形类型,我是在二叉树上找到最短路径还是在具有许多顶点和边缘的图形(不是二叉树)上找到最短路径? (我感到困惑,因为他提到了二元堆,所以我不确定在这里想象什么)
我不明白的文件怎么样:查看图表我们有类似的内容:
n=25000 m=576014
0
176 67
665 185
1129 26
1414 114
1748 205
2027 264
2714 212
2743 132 ...
根据他的解释,我理解n = number of vertices
和m = number of edges
。我不明白的是,顶点0
之后的数字对代表的是我应该使用Dijkstra的图表。此外,如果您查看其中一个文件的末尾,您会注意到此格式中列出的顶点数不是n ='s
的名称编号。这是为什么?