Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2014, 10:57   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию Поиск не пересекающихся нулей в матрице

Всем доброго времени суток. Столкнулся с проблемой. Есть матрица квадратная, например:

0 4 7 0
5 8 0 4
9 0 5 9
7 3 0 0

Нужно найти столько не пересекающихся нулей, какого размера и сама матрица. Эта матрица размера 4 на 4, поэтому надо найти 4 нуля. Когда в матрице всего 4 нуля то проверить пересекаются они или нет - легко. А вот когда их 6, как здесь то выбрать из них не пересекающиеся сложнее.
Armageddets вне форума Ответить с цитированием
Старый 04.11.2014, 11:00   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

А что значит не пересекающиеся нули.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 04.11.2014, 11:01   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Язык китайский? И чем отличается "легко" для 4 и "сложно" для 6?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.11.2014, 11:15   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Так 0 и не имеет пересечений. Вот цифра 4 пересекается или 7, но с палочкой посередине
Arigato вне форума Ответить с цитированием
Старый 04.11.2014, 11:27   #5
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Ну смотрите. Нужно из всех нулей выбрать те, которые не будут находится по координатам икс и игрек с другими выбранными. Например в последнем столбце ноль пересекается с нулем из первого столбца и в этом же столбце тоже есть еще один ноль - поэтому сразу неясно какой из этих нулей брать. В итоге после выбранных нулей должно быть найдено оптимальное решение - выбрать 4 нуля, которые находятся в разных столбцах и в разных строках (ни один из ноликов не должен быть в одной строке или столбце с другим выбранным нулем), например решение такое:

Выбранные нули с координатами (1,1), (2,3), (3,2), (4,4).

Если из матрицы все лишнее удалить то получится:

0 _ _ _
_ _ 0 _
_ 0 _ _
_ _ _ 0

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

Данный алгоритм мне нужен для построения алгоритма решения матрицы венгерским способом. Сам венгерский способ, я думаю реализую, но после каждого шага надо пытаться найти в каждом столбце по нулю, причем чтобы по строкам выбранные нули тоже не находились в одних координатах
Armageddets вне форума Ответить с цитированием
Старый 04.11.2014, 11:29   #6
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Легко для 4, означает, что когда всего есть 4 нуля то проверить их легко. Так как нам ничего больше не остается как брать имеющиеся нули и смотреть не повторяются ли их строки и столбцы?

А вот когда нулей больше, то сложно определить какие же из них выбирать?
Armageddets вне форума Ответить с цитированием
Старый 04.11.2014, 11:32   #7
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

В общем простым языком, все найденные нули должен находится в разных столбцах и в разных строках.
Armageddets вне форума Ответить с цитированием
Старый 04.11.2014, 11:32   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В каждой строке считать количество нулей и если один - считать количество нулей в соответствующем столбце. Если один - то что нужно. И это без разницы, что для 4, что для 6
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.11.2014, 11:42   #9
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

А если у нас будет такая матрица

4 0 5 0
0 2 0 0
2 4 0 1
0 0 3 5

у нас по два нуля в одной строке и по два в каждом столбце?
Armageddets вне форума Ответить с цитированием
Старый 04.11.2014, 11:43   #10
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Можно чтобы в этой строке или столбце были еще нули. Нельзя только чтобы выбранные (те которые мы выберем) находились в одной строке или столбце
Armageddets вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delhhi. Графики ф-ий. Поиск нулей Nasty1 Помощь студентам 0 02.04.2012 21:42
нужен пример составления функции, считающей кол-во нулей в матрице Alexey355 Помощь студентам 2 19.03.2011 22:14
Матрица n*n и поиск нулей. Avus Общие вопросы Delphi 2 20.12.2010 15:46
Pascal. Поиск линейно зависимых строк матрицы. Error 200: Division by zero, хотя нулей в матрице нет Paul-SFL Помощь студентам 8 27.11.2010 21:52
Поиск нулей в файле.Хелп CESHNIK Общие вопросы C/C++ 1 22.02.2008 14:50