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 :: Поиск элементов строк и столбцов в двумерном массиве
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2014
Помог: 0 раз(а)
[+]
Добрый вечер, дорогие форумчане!
Имеется такая проблема. Мне необходима функция поиска элементов в двумерном массиве по строкам и столбцам таким образом:
Имеется изначальная матрица
Идём по дв. массиву, пропуская -1, первый на пути элемент 90. Так вот, необходимо проверить если на этой строке, где 90, имеется хотя бы один элемент, не равный -1, и если на этом же столбце (где стоит 90), имеется хотя бы один элемент, не равный -1, то запомнить элемент 90 в новый двумерный массив $T, иначе, если на столбце есть, а строке нет, или наоборот, на строке есть, а на столбце нет, то приравнять элемент 90 в матрице $X к -1. Помогите, пожалуйста. Спасибо, большое, заранее!
dcc0
Отправлено: 25 Апреля, 2015 - 20:49:49
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
P.S.
Задач сформулирована плохо "иначе, если на столбце есть, а строке нет, или наоборот, на строке есть, а на столбце нет, то приравнять элемент 90 в матрице $X к -1"
то когда дойдем до 20, его тоже приравняем к -1, так как 90 стало -1 раньше и получилось, что на столбце у 20 нет элементов, неравных -1
dcc0
Отправлено: 26 Апреля, 2015 - 07:27:29
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Т.е. в если в строке или столбце есть хотя бы одно положительное число или именно -1?
Что если там -2?
Если массив всегда содержит три элемента, то можно эксплуатировать тот факт, что
произведение всех чисел в строке, где есть два отрицательных числа, будет положительным:
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Можно для начала хотя бы просто посчитать количество -1 в каждой строке и столбце на каждой итерации и на основе этого сделать выводы, что делать дальше.
Если -1 в строке или столбце 2 раза, то осуществляется операция с массивом
(Добавление)
Мда, но даже так не совсем то, но тем не менее количество -1 в столбцах и строках мы определили.
Может быть, нужны ввести промежуточный массив.
(Добавление)
И да, всплывает вопрос, если
array(90,-1,-1),
array(-1,300,100),
array(-1,-1,60)
);
На первой строке и столбце только одно положительное число, то оно должно сразу поменяться или быть записано в какой-то промежуточный массив?
Нашли число неравное -1, что тогда?
1. Проверить наличие положительных чисел в строке, т.е. в подмассиве (вероятно, только какой-то функцией для работы с массивами). Если есть положительные, то создать массив Т.
2. Если нет, вероятно, нужно запомнить число и запустить цикл по столбцу
3. Проверить не содержит этот же столбец -1 больше одного раза или искать положительное число.
Т.е. нужно для каждого числа в строке, в каждой строке, запускать цикл для столбца, считать кол-во -1 или проверять положительные или нет после чего еще, видимо, запускать функцию для изменений в массиве. Может, это должен быть какой-то рекурсивный алгоритм.
Получается, как-то много операций.
----- Март 2021. Бросил программирование
matt_xs
Отправлено: 26 Апреля, 2015 - 18:04:42
Новичок
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2014
Помог: 0 раз(а)
[+]
Извините, что долго не отвечал. Массив изначальный Х может быть любых размеров, хоть 1000 на 1000. При этом там могут быть только положительные числа и 0. Надо пройтись по строке (исключая -1), если есть числа не равные -1 на строке и столбце (по отношению того, к которому ищем), то запоминаем это число, если нет, то приравнивании его к -1
matt_xs
Отправлено: 26 Апреля, 2015 - 20:21:22
Новичок
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2014
Помог: 0 раз(а)
[+]
Если такой случай
array(90,-1,-1),
array(-1,300,100),
array(-1,-1,60)
То здесь массив Х станет -1, так как ищем первый элемент, это 90, для него нет на строке и столбце чисел, не равных -1, то 90 становится -1 и идем по столбцу Х далее, там нет, переходим на новую строку, там 300, для него на строке есть 100, а на столбцах нет, значит 300 становится -1, далее 100, для 100 на строке нет чисел (300 мы приравняли к -1), значит его тоже к -1 и остается 60, с ним таже ситуация, ни на строке ни на столбце нет элементов, не равных -1.
dcc0
Отправлено: 27 Апреля, 2015 - 01:22:29
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Вообще у нас же квадратная матрица... но что этом на дает? Только то, что ее можно перевернуть...
Еще ход мысли: создадим два пустых массива, stolb и stroka.
1. Одним циклом идем по массиву.
2. Будем проверять, чему равно значение в строке, если не -1, то пишем в массив.
3. Тоже самое для столбца.
4. Получаем два массив со строкой и столбцом, которые хранят любые числа, но не -1,
(у нас в условии речь только о -1)
5. Завершаем цикл и начинаем проверку. Считаем количество значений в массивах,
если в stolb ИЛИ в stroka значений больше 1 - это означает, что число для которого осуществляли поиск, положительное. И помимо этого числа на столбце или строке есть еще число НЕРАВНОЕ - 1. Что и является, как я понимаю главным условием задачи.
Тогда выполняем требуем операции.
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2014
Помог: 0 раз(а)
[+]
Матрица не обязательно квадратная, произвольных размеров. Сейчас скоро выложу свой вариант
exlant
Отправлено: 27 Апреля, 2015 - 01:40:31
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
а у меня вот созрел вопрос, если матрица может быть любых размеров, то по какому критерию преобразовывать в -1, когда все остальные числа в ряду -1, или когда только два
числа -1?
В случае с моим " ходом мысли " - преобразовывается в -1, если мы получили массивы для строки и столбца равные 1 (кол-во).
Если получили столбец или строку с 2 значениями, создаем массив $T
Иначе переходим к следующему значению.
----- Март 2021. Бросил программирование
matt_xs
Отправлено: 27 Апреля, 2015 - 02:23:34
Новичок
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2014
Помог: 0 раз(а)
[+]
dcc0 пишет:
Хотя бы одно число (т.е два) на столбце или строке не - 1
на строке И столбце хотя бы одно число, не равное -1.
20 -1 -1 -1 155
-1-1 -1 23 168
-1 50 10 100 -1
-1 20 -1 120 25
здесь 20 преобразовывается в -1 (Добавление)
Решил попробовать таким способом:
иду по матрице $x, если количество элементов (не равных -1) в строке и столбце >=2 и то запоминаю элемент $x[i][j], а если нет, то приравниваю его к -1, но что-то не получается..
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.