我必须在两个给定的城市代码之间找到火车旅程,如果没有直接路线,那么我应该通过其他旅程找到间接路线。如果我想从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
}
我认为对于间接路线,我必须在其他部分处理它们。但是我很难看到我会怎么做,我想我必须看看第一个出发地的目的地,并将其与我给定的目的地相匹配。
答案 0 :(得分:5)
你有什么,是图表。
有许多方法可以找到 路径,很多方法可以找到最短路径,很多方法可以找到最便宜的路径。
这不是一个简单的其他陈述,但我建议你阅读这些:
答案 1 :(得分:2)
我建议您阅读以下文章(非常简短):
http://www.python.org/doc/essays/graphs.html
它是由Python编程语言的创建者Guido von Rossum编写的。
我喜欢它,因为它讨论了如何使用字典(std::map
,用C ++的说法)实现图形,并提供了find_path
,find_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。