c# – 如何进行列表遍历?

我最近开始了一个涉及使用来自伦敦Ungerground数据集的数据的项目,以便找到距离给定站点n分钟的路线.

到目前为止,我已经能够从数据集中解析数据,并在每个站之间创建可能的路由.我现在有一个路由对象列表,它具有以下属性:

Parent - the first station
Child - the next linked station
Line - whichever line the station is on
Time - the time between the two stations

我目前使用VICTORIA作为起始站的数据是:

我已经格式化了我的输出以使其更容易阅读,但每一行都是路由对象的表示.所以你有起始站,时间,下一站和线路.

VICTORIA => 1 <= PIMLICO : Victoria
VICTORIA => 2 <= GREEN PARK : Victoria
VICTORIA => 2 <= ST JAMES PARK : Circle
VICTORIA => 2 <= SLOANE SQUARE : Circle
PIMLICO => 2 <= VAUXHALL : Victoria
GREEN PARK => 2 <= OXFORD CIRCUS : Victoria
GREEN PARK => 1 <= WESTMINSTER : Jubilee
GREEN PARK => 2 <= BOND STREET : Jubilee
GREEN PARK => 1 <= PICCADILLY CIRCUS : Piccadilly
GREEN PARK => 1 <= HYDE PARK CORNER : Piccadilly
ST JAMES PARK => 1 <= WESTMINSTER : Circle
SLOANE SQUARE => 1 <= SOUTH KENSINGTON : Circle
VAUXHALL => 2 <= STOCKWELL : Victoria
VAUXHALL => 2 <= PIMLICO : Victoria
OXFORD CIRCUS => 1 <= PICCADILLY CIRCUS : Bakerloo
OXFORD CIRCUS => 2 <= REGENTS PARK : Bakerloo
OXFORD CIRCUS => 2 <= TOTTENHAM COURT ROAD : Central
OXFORD CIRCUS => 1 <= BOND STREET : Central
OXFORD CIRCUS => 2 <= GREEN PARK : Victoria
OXFORD CIRCUS => 1 <= WARREN STREET : Victoria

从VICTORIA那里收集所有可能路线的最佳方法是什么?

例如:

VICTORIA > GREEN PARK > WESTMINSTER
VICTORIA > GREEN PARK > BOND STREET
VICTORIA > PIMLICO > VAUXHALL
最佳答案
听起来像是图论问题.我的最爱!

找到“所有可能的路线”的问题在于,使用您提供的数据(或在这种情况下的任何真实数据集),您将遇到循环.因此,对于任何给定的路线,您将需要确保每个站只访问一次.

由于你只有一个起点,我建议Djikstra’s Alogrithm.这将找到从VICTORIA到其他所有车站的路径(实际上是最短的路径).至少,每个其他可达的站点.这是一种众所周知,快速且相对容易实现的算法.通常在O(n ^ 2)时间内运行,但可以用一些数据结构jimmying按摩到O(m nlogn)中.

希望至少让你走上正轨!

转载注明原文:c# – 如何进行列表遍历? - 代码日志