【发布时间】:2016-09-14 15:18:16
【问题描述】:
我有一个 int <List<List<int>> 列表列表,它代表一个方向向量
例如
(1,2)
(1,3)
(2,4)
(3,5)
(4,3)
(5,1)
我想用这些向量创建所有可能的路线,这样最终路线就不会创建一个无限循环(结束于自身)
所以:
(1,2)
(1,3)
(2,4)
(3,5)
(4,3)
(5,1)
(1,2,4)
(1,2,4,3)
(1,2,4,3,5)
(1,2,4,3,5,1)
(1,3,5)
(1,3,5,1)
(2,4,3)
(2,4,3,5)
(2,4,3,5,1)
(2,4,3,5,1,2)
(3,5,1)
etc...
我还没有找到一种有效的方法来做这样的事情。
我之前尝试过使用
创建所有可能的组合 private IEnumerable<int> constructSetFromBits(int i)
{
for (int n = 0; i != 0; i /= 2, n++)
{
if ((i & 1) != 0)
yield return n;
}
}
public IEnumerable<List<T>> ProduceWithRecursion(List<T> allValues)
{
for (var i = 0; i < (1 << allValues.Count); i++)
{
yield return ConstructSetFromBits(i).Select(n => allValues[n]).ToList();
}
}
效果很好,但忽略了问题的方向。
该方法不必是递归的,尽管我怀疑这可能是最明智的方法
【问题讨论】:
标签: c# algorithm graph-algorithm