C# 如何获得两个城市之间的最低票价
我有一张桌子C# 如何获得两个城市之间的最低票价,c#,sql-server,algorithm,data-structures,shortest-path,C#,Sql Server,Algorithm,Data Structures,Shortest Path,我有一张桌子 Source Destination Fare A B 10 B C 5 B D 1 D C 1 A D 1 现在我想写一个查询,给出两个城市之间的最低票价 例如,如果我想去A->C,那么最低票价是2 A->D->C 此问题的MS Sql查询将是什么 你尝试过谷歌搜索: 旅行推销员 或
Source Destination Fare
A B 10
B C 5
B D 1
D C 1
A D 1
现在我想写一个查询,给出两个城市之间的最低票价
例如,如果我想去A->C,那么最低票价是2 A->D->C
此问题的MS Sql查询将是什么 你尝试过谷歌搜索:
旅行推销员
或
sql server最短路径
有很多答案试试这个:
;以路径作为
-锚查询:获取第一步
选择CASTCONCATSource“->”,目标为VARCHARMAX,路径为,
目的地、车费、,
IIFDestination='C',1,0作为终止
从mytable
其中Source='A'
联合所有
-递归部分:获取下一步
选择CASTCONCATPath“->”,t.目标为VARCHARMAX,路径为,
t、 目的地,车费=t.车费+p.车费,
IIFt.Destination='C',1,0作为终止
从mytable作为t
将路径连接为t上的p。源=p。目标
其中p.目的地“C”
选择路线、车费
从…起
选择路径、车费、,
按车费排序为rnk
从小路
其中Terminate=1作为t
其中t.rnk=1
这是一种蛮力方法:它使用递归CTE来获取所有可能的路径。然后使用排名,我们可以选择票价最低的
我不确定您是否能够通过单个sql查询获取信息您需要一个算法实际上您需要一个单一源最短路径算法,如Dijkstra算法。您将使用票价作为边缘值。TSP将不起作用,因为它将为您提供访问所有城市的最低成本路线,而不仅仅是您感兴趣的两个城市。此信息应放在评论部分。这不是真正的答案这不是答案事实上这是答案,伙计们。因为这让他找到了解决问题的最佳方法。但你到底在这里干什么。。。好我帮你回答:没什么!除了你对我大喊大叫之外,这不是答案,不是答案!如果他自己能做到这一点,我为什么要在这里复制网络上已经存在的解决方案???你的建议至少是一样的吗?好不,这就是答案。谷歌不是一个真正的答案,只是一个评论。这就是我们想告诉你们的。例如,我添加了一条带有指向TSP wikipedia链接的评论。Giorgos Betsos写了一个不错的算法。看到区别了吗?这是一个非常好的答案,但您是否也应该在锚查询中检查终止条件?如果源是A,目标是B,那么当前查询将不会返回结果。@EdmondQuinton这将被递归部分的第一次执行捕获:…其中p.目标“C”可能我遗漏了什么。在最后一个select子句中,您只返回已确定路径已终止于Terminate=1的目标的行。但是,如果当前查询被修改为搜索从A到B的最低票价,那么唯一可用的路径将是票价为10的A->B的直接路径。但是,由于锚查询始终将0作为终止条件,并且路径A->B不会包含在查询的递归路径中,因此不会返回任何结果。@EdmondQuinton是的,您是正确的。很好的解释,谢谢你指出。不用担心,回答很好: