Перезапись элементов List

179
04 ноября 2017, 11:56

Доброго времени суток. Имеется следующий код генерации перестановок:

public static List<int[]> listOfDiffVectors = new List<int[]>();
    public static List<int[]> listOfPerms = new List<int[]>();
    private static void Swap(ref int a, ref int b)
    {
        if (a == b) return;
        a ^= b;
        b ^= a;
        a ^= b;
    }
    public static void GetPer(int[] list)
    {
        int x = list.Length - 1;
        GetPer(list, 0, x);
    }
    private static void GetPer(int[] list, int k, int m)
    {
        if (k == m)
        {
            int[] diff = new int[list.Length];
            int i = 0;
            for (i = 0; i < list.Length; i++)
            {
                int d = 0;
                if (i == list.Length - 1)
                {
                    d = list[0] - list[i];
                    if (d < 0)
                        d += list.Length;
                    else
                        d %= list.Length;
                    diff[0] = d;
                }
                else
                {
                    d = list[i + 1] - list[i];
                    if (d < 0)
                        d += list.Length;
                    else
                        d %= list.Length;
                    diff[i + 1] = d;
                }
            }
            bool flag = false;
            foreach (int[] temp in listOfDiffVectors)
                if (temp.SequenceEqual(diff))
                {
                    flag = true;
                    break;
                }
            if (!flag)
                listOfDiffVectors.Add(diff);
            Console.WriteLine(string.Join(" ",list));
            // тут я вывожу перестановки
            listOfPerms.Add(list);                    
        }
        else
            for (int i = k; i <= m; i++)
            {
                   Swap(ref list[k], ref list[i]);
                   GetPer(list, k + 1, m);
                   Swap(ref list[k], ref list[i]);
            }
    }

Вот так вызываю функцию:

int[] perm = new int[] { 0,1 };
GetPer(perm);
foreach (int[] tmp in listOfPerms)
    Console.WriteLine(string.Join("", tmp));

Дело в том, что на экран выводится всё правильно: 0 1 и 1 0, но вот в listOfPerms хранятся две одинаковые перестановки 1 0 и 1 0. Понимаю, что перезаписываю содержимое, но не знаю, как это исправить. Помогите разобраться, пожалуйста.

READ ALSO
Пиксельная мозаика из картинки

Пиксельная мозаика из картинки

Всем привет! Помогите разобраться с реализацией в C# Необходимо сделать следующее: 1Загрузить картинку (любого размера) 2

198
XML-сериализация по особым правилам

XML-сериализация по особым правилам

Имеется электронный документооборотОбмен данными выполняется с помощью XML следующей структуры:

231
Ошибка при декодировании BitmapImage

Ошибка при декодировании BitmapImage

Кодирую BitmapImage (в формате gif) в массив байт, далее передаю этот массив байт по сети, массивы байтов при отправке и пришествию совпадают, далее...

415
Залочить форму на время работы события

Залочить форму на время работы события

Есть на форме кнопка сохранитьКогда я её нажимаю, есть необходимость залочить форму, и запустить например колесо прокрутки с текстом на подобии...

231