如何将二维数组随机化为在两个方向上都具有唯一值?

时间:2018-08-28 01:56:28

标签: c# arrays linq sorting matrix

如果我有两个像这样的数组:

var lanes = {1,2,3};

var racers = {1,2,3,4,5};

我如何像这样那样随机矩阵每个方向上使用唯一值的这些? >

2 3 5

3 1 2

5 4 1

4 2 3

1 5 4

行不重复任何值,列相对于自己也不重复任何值。给定 n 个车道和 n 个赛车手。

我正在按照以下条件进行比赛的车道旋转:

  • 1-6条可能的车道
  • n个可能的赛车手(10到20个或更多)
  • 每个赛车手在每个车道上都只比赛一次
  • 每行必须包含唯一值(一次不能在2条车道上使用同一赛车手)
  • 每列必须唯一(不允许赛车手多次使用车道)
  • 随机顺序

我正在使用C#,因此可能会使用Linq。不管...我不确定这应该是什么逻辑。到目前为止,我遇到了与我尝试过的方法发生冲突的情况。

1 个答案:

答案 0 :(得分:1)

这应该做您想做的,创建一个2维数组,其中包含您随机排列的任意车道和赛车手的阵列,确保没有一个赛车手在同一车道上启动超过一次。问题在于它是随机分配一个阵容,它可能会将自己绘制到一个角上(即,鉴于在当前行和车道中已分配的位置,该位置不再有唯一的值)。在这种情况下,请重新尝试。我知道这不是最漂亮的解决方案,但是对于6个车道和20个玩家来说,碰撞并不算太糟:

levels

这会生成如下内容:

enter image description here