找到间接列车连接

时间:2013-05-17 19:45:57

标签: c++ loops

我必须在两个给定的城市代码之间找到火车旅程,如果没有直接路线,那么我应该通过其他旅程找到间接路线。如果我想从A到B,我可能不得不从A到C再到B.

我的火车路线档案格式为:出发码目的地代码公司价格时间 这将查看两个城市代码之间的直接路线。

现在我使用以下循环进行直接连接,它可以工作,我只需要间接连接的帮助。

// load file data into v1

string dep, dest;
cout << "\n\tEnter the departure: ";
cin >> dep;
cout << "\n\tEnter the destination: ";
cin >> dest;

for(int i = 0; i < v1.size(); ++i) {
    // Departure() and Destination(), return the departure/destination codes
    if (v1[i].Departure() == dep && v1[i].Destination() == dest)
          // here I find all the direct routes
    else
         // indirect routes dealt with here
}

我认为对于间接路线,我必须在其他部分处理它们。但是我很难看到我会怎么做,我想我必须看看第一个出发地的目的地,并将其与我给定的目的地相匹配。

3 个答案:

答案 0 :(得分:5)

你有什么,是图表。

有许多方法可以找到 路径,很多方法可以找到最短路径,很多方法可以找到最便宜的路径。

这不是一个简单的其他陈述,但我建议你阅读这些:

http://en.wikipedia.org/wiki/Dijkstra's_algorithm

http://en.wikipedia.org/wiki/Shortest_path_problem

答案 1 :(得分:2)

我建议您阅读以下文章(非常简短):

http://www.python.org/doc/essays/graphs.html

它是由Python编程语言的创建者Guido von Rossum编写的。

我喜欢它,因为它讨论了如何使用字典(std::map,用C ++的说法)实现图形,并提供了find_pathfind_all_paths和{{的非常简短有效的实现。 1}}。鉴于它们是用Python实现的,将它们转换为C ++很简单(因为Python易于阅读;考虑伪代码而不是 Python解决方案)。

例如,以下代码实现了find_shortest_path

find_all_paths

请注意,这是一个递归实现。

答案 2 :(得分:1)

您可以查看Google在Google地图中为Google Transit所做的工作:http://ad.informatik.uni-freiburg.de/files/transferpatterns.pdf