我是堆栈溢出的新手,但已经用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,我们必须计算到地图中每个节点的最短路径。
我的问题出在
将文本读入一个数组或列表中,我可以在其中分隔不同的地图
读取该列表以查找每个地图的节点和边的数量
然后根据给定的源索引找到最短路径。
到目前为止,我已经尝试将.txt
文件读入一个数组,并尝试根据不同的映射块将该数组分开
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解释了大部分内容(它还包含示例,因此我敢打赌您可以使用它)。