在元组数组中切换元组的位置

时间:2016-03-14 19:59:06

标签: c# arrays algorithm boolean tuples

我想&#34;洗牌&#34;在某种程度上Tuple<bool,int[]>[],但我不需要完全洗牌我想切换第一个的位置与第二个切换第一个的位置与第三个,即第一个应切换到所有地方除了第二个元组之外的其他元组应该这样做。我会尝试用彩票中的一些简单数字来解释它:

我们有1,2,3让我们假设那些是我的3元组:

  • 首先我们用2切换1,得到2,1,3;
  • 第二步我们用3切换1,我们得到2,3,1;
  • 我们再次用2切换1,得到1,3,2;
  • 我们再次将3与3切换,得到3,1,2;
  • 最后我们用2切换1,得到3,2,1;

这就是我想要用我的元组实现的目标:

Tuple<bool, int[]>[] hodove =
        {
            new Tuple<bool, int[]>(Nadqsno(red, 1) && Napred(kolona, 2), new[]
            {
                count++,
                novMinatRed = red + 1,
                novaMinataKolona = kolona + 2
            }),
            new Tuple<bool, int[]>(Nadqsno(red, 2) && Napred(kolona, 1), new[]
            {
                count++,
                novMinatRed = red + 2,
                novaMinataKolona = kolona + 1
            }),
            new Tuple<bool, int[]>(Nalqvo(red, 1) && Napred(kolona, 2), new[]
            {
                count++,
                novMinatRed = red - 1,
                novaMinataKolona = kolona + 2
            }),
            new Tuple<bool, int[]>(Nalqvo(red, 2) && Napred(kolona, 1), new[]
            {
                count++,
                novMinatRed = red - 2,
                novaMinataKolona = kolona + 1
            }),
            new Tuple<bool, int[]>(Nadqsno(red, 2) && Nazad(kolona, 1), new[]
            {
                count++,
                novMinatRed = red + 2,
                novaMinataKolona = kolona - 1
            }),
            new Tuple<bool, int[]>(Nalqvo(red, 2) && Nazad(kolona, 1), new[]
            {
                count++,
                novMinatRed = red - 2,
                novaMinataKolona = kolona - 1
            }),
            new Tuple<bool, int[]>(Nadqsno(red, 1) && Nazad(kolona, 2), new[]
            {
                count++,
                novMinatRed = red + 1,
                novaMinataKolona = kolona - 2
            }),
            new Tuple<bool, int[]>(Nalqvo(red, 1) && Nazad(kolona, 2), new[]
            {
                count++,
                novMinatRed = red - 1,
                novaMinataKolona = kolona - 2
            }),
        };

2 个答案:

答案 0 :(得分:0)

如果您想要的是字符串的所有排列,您可以使用交换算法,例如找到的here

使用元组数组

而不是字符串

答案 1 :(得分:0)

您是否尝试通过逐步交换阵列中的元素来枚举所有排列?类似Heap's algorithm的内容?