Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск в матрице по линиям в 45 градусов совпадений
 
 автор: pavluxa09   (23.06.2012 в 22:19)   письмо автору
 
 

Здравствуйте. У меня имеется квадратная матрица (двумерный массив с одинаковым количеством строк и стобцов) размера n, необходимо узнать, есть ли в главных либо побочных ВСЕХ диалогалях массив вида array( 1, 1, 1 ), как это можно реализовать?

  Ответить  
 
 автор: Valick   (23.06.2012 в 23:16)   письмо автору
 
   для: pavluxa09   (23.06.2012 в 22:19)
 

когда я делал игру морской бой, я использовал массивы (матрицы)
но когда перевел движок игры на БД, то отказался от матрицы в пользу одномерного массива

  Ответить  
 
 автор: pavluxa09   (24.06.2012 в 00:07)   письмо автору
 
   для: Valick   (23.06.2012 в 23:16)
 

Даже если взять одномерный массив, как реализовать то что я написал? Это задача ещё тяжелее

  Ответить  
 
 автор: cheops   (24.06.2012 в 07:20)   письмо автору
 
   для: pavluxa09   (23.06.2012 в 22:19)
 

У вас же там уже точки есть? Просто берите координату, скажем 4, 5, организуйте два цикла: один вычитает одновременно их X и Y по 1, а другой увеличивает, причем до тех пор, пока не упретесь в границу поля или на противоположный символ. Вы работаете на PHP вам можно удобно динамически формировать массив с элементами, как его размерность превышает заданное значение можно фиксировать выигрышь.

  Ответить  
 
 автор: pavluxa09   (24.06.2012 в 10:50)   письмо автору
 
   для: cheops   (24.06.2012 в 07:20)
 

Не совсем понял идею, можно подробнее?

  Ответить  
 
 автор: cheops   (25.06.2012 в 07:36)   письмо автору
 
   для: pavluxa09   (24.06.2012 в 10:50)
 

Нарисуйте квадрат и отметьте точку, где-то по середине, чтобы построить диагональ с верхнего левого угла в нижний правый, вам нужно от координат текущей точки X и Y отнимать единицу, а потом прибавлять единицу, так вы сможете проверить точки по одной диагонали. Для работы с точками по другой диагонали нужно будет вычитать по X и прибавлять по Y, а потом прибавлять по X и вычитать по Y. Лучше наверное это делать в цикле while, только нужно внимательно составлять граничные условия.

  Ответить  
 
 автор: Valick   (25.06.2012 в 09:05)   письмо автору
 
   для: cheops   (25.06.2012 в 07:36)
 

работать с одномерным массивом гораздо проще
допустим поле 3х3 (крестики нолики) размерность по горизонтали 3, отсчет от нуля
первая координата 0 по диагонали это будет 0+(3+1)=4 далее 4+(3+1)=8
тоже самое в обратную стоорону 8-(3+1)=4 и 4-(3+1)=0
другая диагональ 4-(3-1)=2 и 4+(3-1)=6
вертикаль принцип тот же, только плюсуем и минусуем чистую размерность поля (3)
горизонталь 4-1=3 и 4+1=5
единственное запамятовал как определять границу (например то что 3.4.5 это одна строка, а 6.7.8 это уже другая строка), сейчас буду вспоминать, по моему там делим на размерность и смотрим по остатку
и самое главное двумерный массив легко ложится в базу и легко обрабатывается средствами MySQL
а не очень главное это то что передается из браузера одна координата и вывод в браузер тоже проще

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования