根据给定的地图编程Dijkstra的Alogirthm

问题描述 投票:0回答:1

我是堆栈溢出的新手,但已经用C ++和python编写代码已有大约4年了。我正在一个涉及Dijkstra算法的项目。我们得到了这样的地图列表:

A
1000
3000
0 1 7
1 2 2
2 3 15
3 0 9
1 3 10
3 4 5
3 5 7
4 5 4
B
3000
5000
0 1 1
1 2 10
1 3 4
2 4 5
3 4 90
4 5 1

第一个字母表示地图ID,后两个数字表示传输,然后是传播延迟,其余为节点及其权重。例如,在地图A中,从节点0到1的成本为7。我们需要从文本文件中读取地图,并给定map.txt,起始索引和地图ID,我们必须计算到地图中每个节点的最短路径。

我的问题出在

  1. 将文本读入一个数组或列表中,我可以在其中分隔不同的地图

  2. 读取该列表以查找每个地图的节点和边的数量

  3. 然后根据给定的源索引找到最短路径。

到目前为止,我已经尝试将.txt文件读入一个数组,并尝试根据不同的映射块将该数组分开

c++ io filereader
1个回答
0
投票

q1。您应该进行一个大循环,以获取数据集,直到为其提供一些“退出值”(例如“ 0”)为止。 (下面的伪代码)

char setName = '#';
while( setName isn't < letter > || setName isn't < exit value >  )
{
   cin >> setName;
   if( setName == < exit value > ) return;
   else ... //iterate over set
}  

q2。创建一个指向节点+ int howManyEdges的指针数组以计算边。当您仅接受输入时:

  • 检查节点是否已经在数组中

  • howManyEdges添加+1(或+2,取决于边是否为单向)>

  • 向节点添加边。


  • q3。 (使事情变得非常简单明了)您可以遍历列表/数组,并将每个节点设置为“最短距离”以到达该节点。如果发现一条路径较长,则将其删除。 here解释了大部分内容(它还包含示例,因此我敢打赌您可以使用它)。

© www.soinside.com 2019 - 2024. All rights reserved.