c# - C# 中的置换算法

标签 c# algorithm permutation combinatorics

我正在为我需要编写的算法而苦苦挣扎。我正在使用 C#。

假设我有一个 List<Bag>我有一个 List<Lunch> . 我需要编写一个算法来枚举所有包中午餐的所有排列。

例如,假设有 3 份午餐和 2 个袋子:

// Permutation 1
Bag 1, Lunch 1
Bag 2, Lunch 1

// Permutation 2
Bag 1, Lunch 1
Bag 2, Lunch 2

// Permutation 3
Bag 1, Lunch 1
Bag 2, Lunch 3

// Permutation 4
Bag 1, Lunch 2
Bag 2, Lunch 1

// Permutation 5
Bag 1, Lunch 2
Bag 2, Lunch 2

// Permutation 6
Bag 1, Lunch 2
Bag 2, Lunch 3

// Permutation 7
Bag 1, Lunch 3
Bag 2, Lunch 1

// Permutation 8
Bag 1, Lunch 3
Bag 2, Lunch 2

// Permutation 9
Bag 1, Lunch 3
Bag 2, Lunch 3

两个排列 Bag 1 Lunch 1 and Bag 2 Lunch 2Bag 1 Lunch 2 and Bag 2 Lunch 1不同是因为袋子的容量不同,因此它们都需要被枚举。

袋子和午餐的数量可以是任意数量。

我创建了一个名为 BagLunch 的类其中包含一个袋子和一对午餐。我上面给出的示例列表将存储在 List<BagLunch> 中.

谢谢。

最佳答案

在 LINQ 中使用交叉连接:

var qry = from bag in bags
          from lunch in lunches
          select new BagLunch 
          { Bag=bag, Lunch=lunch};
var baglunches = qry.ToList();

编辑:
您需要修改 select 子句以处理 BagLunch 类的结构。

关于c# - C# 中的置换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168269/

相关文章:

r - k 步中的最大排列 (R)

c# - 如何在 C# 中使用 'do' ByVal

algorithm - 是否存在 "binary sort"算法?

algorithm - 使用分而治之找到最长的递增子序列

python-3.x - 如何找到最小开关数以按升序对给定的排列(比方说 1-10)进行排序

c++ - 用条件 C++ 重复给定字符排列的算法

c# - Win8与WP8共享MVVM(一页2页)

c# - 使用 c# api 上传文件时不支持媒体类型 http 响应。

C# mysql 参数化查询

algorithm - CPU 使用率是如何计算的?