Двумерные массивы. Генерация уникальных элементов для каждой строчки и столбца

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Понравилась задача по генерации элементов в двумерный массив. Смысл задачи в том, что имеется массив, размерностью N*N клеток. Каждую строчку надо заполнить значениями от 1 до N и каждую колонку надо заполнить значениями от 1 до N, причем ни в одной из строчек и ни в одной из колонок не должны встретится дубликаты

например массив 3 на 3 Слева правильный, справа неправильный
1   2   3       1   2   3
3   1   2       2   3   1
2   3   1       2   1   3

Пример 3 на 3 только для того, чтобы попробовать объяснить смысл задачи, размерность массива может быть и 15 на 15 и 100 на 100 и как угодно. Я делал для квадратной матрицы, увы мой мозг способен на очень малое.

Visual Studio Express 2012

Такой вот пример, возможно, будет кому-то полезен.
На заметку: Здесь использован механизм перемены мест колонок. Простой пример смены 1 и 2 колонок местами

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

6 комментариев: Двумерные массивы. Генерация уникальных элементов для каждой строчки и столбца

  • Vladimir говорит:

    На главной странице 2 ссылки подряд на эту страницу

  • Vladimir говорит:

    хм.. решения данной матрицы любой размерности как сразу пришло в голову только посмотрел на 2 ваши матрицы, тут одно вроде несложное правило, каждую следующую строку нужно сдвигать на 1 и повторений ни в строке ни в столбцах не будет, например первая строка у нас 1234567890, вторую строку сдвигаем на 1 и получаем 0123456789, далее следующую строку сдвигаем еще на 1 и получаем 9012345678, тое сть при сдвиге последнее число переносим на место первого и получаем матрицу где не в строке не в столбце нет повторений
    1 2 3 4 5 6 7 8 9 0
    0 1 2 3 4 5 6 7 8 9
    9 0 1 2 3 4 5 6 7 8
    8 9 0 1 2 3 4 5 6 7
    7 8 9 0 1 2 3 4 5 6
    6 7 8 9 0 1 2 3 4 5
    5 6 7 8 9 0 1 2 3 4
    4 5 6 7 8 9 0 1 2 3
    3 4 5 6 7 8 9 0 1 2
    2 3 4 5 6 7 8 9 0 1

    хм.. также можно сдвигать на любое кол-во шагов не равное или не превышающее размерность матрицы тогда все будет выглядеть хаотичнее но не будет повторений.

    Автор сайта отвечает:
    Не пройдёт этот способ. См. рисунок.

    Рано или поздно пойдут повторения.

  • Vladimir говорит:

    Конечно пойдут, у тебя размерность массива по строкам больше чем элементов массива (элементов 5 а строк 9), повторения неизбежны и ничего тут не поможет.

    И еще, почему когда я нажимаю на «Ответить» под чьим то комментарием то ничего не происходит? Просто исчезает написанный текст.

    • admin говорит:

      Матрица любой размерности — это матрица любой размерности, а не квадратная. Наверное комментарием выше имелось в виду квадратная матрица с произвольным количеством элементов в своей стороне.

      Если ответить под автором сайта, то это как нажать ответить самому себе. В остальных случаях не могу подсказать почему.

  • Vladimir говорит:

    Чтобы повторений не было, ни одна из размерностей массива (будь то строки или столбцы) не должно превышать количество (уникальных) элементов

    • admin говорит:

      Если число элементов в строках больше, чем в колонках, то уникализировать массив совсем просто.
      Если число элементов в колонках больше, чем в строках, то для уникализации можно заполнять массив по колонкам.
      Единственное, прямоугольный массив не будеть столь же опрятным, как квадратный.

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок