Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Заполнить двумерный массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
demot
Отправлено: 21 Ноября, 2010 - 15:57:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Как проще заполнить двумерный массив 7х7 числами от 1 до 7, но чтоб они в столбцах и строках не повторялись (как в судоку)?
Если не затруднит, то алгоритм заполнения с комментариями, пожалуйста.
 
 Top
SAD
Отправлено: 21 Ноября, 2010 - 16:18:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




PHP:
скопировать код в буфер обмена
  1. $n = 3;
  2. $n2 = $n * $n;
  3. for ($i = 0; $i < $n2; $i++)
  4.         for ($j = 0; $j < $n2; $j++)
  5.                 $field[$i][$j] = ($i * $n + $i / $n + $j) % $n2 + 1;
  6.  

правда тут 9 на 9

(Отредактировано автором: 21 Ноября, 2010 - 16:19:10)

 
 Top
demot
Отправлено: 21 Ноября, 2010 - 17:08:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




В принципе, как вариант неплохо. Только хотелось бы, чтоб заполнение происходило случайным образом. Т.е. чтоб каждый раз генерировались разные матрицы.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Ноября, 2010 - 17:42:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




demot пишет:
Т.е. чтоб каждый раз генерировались разные матрицы.

PHP:
скопировать код в буфер обмена
  1. for ($i=0, $rez=array();; $i<7; $i++) {
  2. $rez[] = shuffle(range(1,7));
  3. }

Если не наврал Радость


-----
PostgreSQL DBA
 
 Top
demot
Отправлено: 21 Ноября, 2010 - 18:22:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Мелкий пишет:
Если не наврал


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

(Отредактировано автором: 21 Ноября, 2010 - 18:24:35)

 
 Top
JustUserR
Отправлено: 21 Ноября, 2010 - 20:33:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




demot пишет:
Значения элементов массива не должны повторятся ни в строках, ни в столбцах
Решение предполагаемой вами задачи не может обеспечиться посредством осуществлением единичной случайной перестановки строк и столбцов в таблице - в общем случае небходимо производить последовательность случайных перенесений до получения целевого результата Однако при решении вашей задачи на практипе испльзование такого способа не является приемлемым в силу его достаточной вычислительной сложности - в качестве оптимального решения возможно проведение установки случайных компонетов в первой строке - в то время как в оставшихся строках обеспечивается выбор несовпадающих значений и проведения рандомизации исключительно в их списке - таким образом при осуществлении заполнения последней строки вызов случайной функции уже не используется


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
demot
Отправлено: 21 Ноября, 2010 - 20:38:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




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


Благодарю за ответ! Конечно заумно написано, но общий принцип понятен, буду мучаться Улыбка
Еще раз спасибо!
 
 Top
SAD
Отправлено: 21 Ноября, 2010 - 20:42:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




У меня знакомый писал судоку. спрошу как он делал. отпишусь
 
 Top
JustUserR
Отправлено: 21 Ноября, 2010 - 20:49:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




demot пишет:
Благодарю за ответ! Конечно заумно написано, но общий принцип понятен, буду мучаться
Еще раз спасибо!
На здоровье! Рассморение приведенной вами задачи по осуществлению заполнения матрицы случайными числами с условием неповторяемости элементов по заданому критерию - обеспечивается основным принципом включает в себя следующей правило - заполнение каждой последующей строки матрицы производится при условии фиксации одного дополнительного элемента по сравнению с предыдущей итерацией
В качестве возможной программной реализации алгоритма - применимо создание первой строки матрцы в соответсвии со случайным заполнение - в то время как для каждого j-ого элемента i-ой строки обеспечивается вертикальный просмотр элементов подлежащих возможному включению - и выбора одной из допустимых комбинаций посредством указанного алгоритма фиксации элемента


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Byxou
Отправлено: 16 Июля, 2014 - 11:59:56
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $n = 3;
  3. $n2 = $n * $n;
  4. $null = 0;
  5. for ($i = 0; $i < $n2; $i++){
  6.         for ($j = 0; $j < $n2; $j++){
  7.                 $field[$i][$j] = ($i * $n + $i / $n + $j) % $n2 + 1;
  8.                                 $arr[] = $field[$i][$j];
  9.                                 isset($arr2[$arr[count($arr)-1]])?$arr2[$arr[count($arr)-1]]+=1:$arr2[$arr[count($arr)-1]] =$null;
  10.                                 // echo "($i * $n + $i / $n + $j) % $n2 + 1 =".$field[$i][$j]."<br />";//"&nqrt&nqrt&nqrt&nqrt&nqrt&nqrt->&nqrt&nqrt&nqrt&nqrt&nqrt&nqrt&nqrt";
  11.                 }
  12. }
  13. var_dump($arr2);

Вот это интересно стало))))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB