Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/75: Рейтинг темы: голосов - 75, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 16

Найти седловую точку в матрице

29.02.2016, 13:18. Показов 15080. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
седловая точка- это максимальный элемент в строке и минимальный в столбце, вот мой код, что-то тут явно не так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n = int(input('введите кол-во cтрок и столбцов: '))
a =[list(map(int,input().split())) for i in range(n)]
maxx=a[0][0]
flag=0
for i in range (n):
    for j in range (n):
        if a[i][j]>maxx:#поиск максимального в строке
            maxx=a[i][j]
            minn=a[i][j]
    for i1 in range (n):
            if a[i][i1]<minn:#поиск минимального в столбце
                minn=a[i1][j]
                print(minn)
    if maxx==minn:#проверка, что максимальное в строке=минимальному в строке
        maxx=0
        flag+=1#вычисляем номер седловой точки
        print('Седловая точка № ',flag,'=',maxx)
if flag==0:#если седловых точек нет, то выводим сообщение об этом
    print('Седловой точки нету')
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.02.2016, 13:18
Ответы с готовыми решениями:

Как найти седловую точку в матрице?
Есть задача: Разработать функцию saddle_point(matrix), которая принимает 1 аргумент -- прямоугольную матрицу целых чисел, заданную в...

Найти седловую точку матрицы N×N
Найти седловую точку матрицы N×N. Седловой точкой является точка, максимальная в столбце и одновременно минимальная в строке

Найти в матрице седловую точку
Помогите решить задачу: Седловой точкой в матрице называется элемент, являющийся одновременно наибольшим в столбце и наименьшим в строке....

9
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
29.02.2016, 19:05
Как то так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n,l=map(int, input().split())
matrix=[(input().split()+['0']*l)[:l] for _ in range(n)]
pos=[set(), set()]
for i in range(n): #Поиск макс значений в каждой строке
    j=matrix[i].index(max(matrix[i]))
    pos[0]|={(i, j)}
rev_matrix=[[matrix[j][i] for j in range(n)] for i in range(l)] #Перестройка матрицы(столбцы-строки, строки-столбцы)
for i in range(l): #Поиск мин значений в каждом столбце
    j=rev_matrix[i].index(min(rev_matrix[i]))
    pos[1]|={(j, i)} 
if pos[0]&pos[1]: #Поиск пересечений
    a, b=list(pos[0]&pos[1])[0]
    matrix[a][b]+='!' #К седловой точке добавляется '!'
else:
    print('Седловой точки не найдено')
for line in matrix: #Вывод матрицы
    print(*line)
0
 Аватар для YakobsEA
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
29.02.2016, 19:59
А у меня получилось вот так:
Python
1
2
3
4
5
6
7
n = int(input('введите кол-во cтрок и столбцов: '))
a =[list(map(int,input().split())) for i in range(n)]
a1 = [*map(list, zip(*a))]
 
for i in range(n):
    if ( max(a[i]) == min(a1[a[i].index(max(a[i]))]) ):
        print(i, "   " , a[i].index(max(a[i])))
1
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
29.02.2016, 20:33
YakobsEA, у меня строка
Python
1
a1 = [*map(list, zip(*a))]
Выдает ошибку
Python
1
SyntaxError: can use starred expression only as assignment target
П.с. переделал свою
Python
1
2
3
4
5
6
7
8
9
10
11
n,l=map(int, input().split())
matrix=[(input().split()+['0']*l)[:l] for _ in range(n)]
rev_matrix=[[matrix[j][i] for j in range(n)] for i in range(l)] 
 
for pos1 in range(n):
    pos2=matrix[i].index(max(matrix[i]))
    if (max(matrix[pos1]) == min(rev_matrix[pos2])):
        matrix[pos1][pos2]+='!'
 
for line in matrix: 
    print(*line)
0
 Аватар для YakobsEA
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
01.03.2016, 06:33
Whost, у Вас питон 2-й версии возможно?

Добавлено через 5 минут
К стати, в данном случае можно и вот эти обойтись:
Python
1
a1 = [*zip(*a)]
А ещё правильнее в numpy такую задачу решать. В моём решении (и в ваше переделанном кажется тоже) есть нюанс...
Попробуйте задать матрицу 3 на 3 из единиц...
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
01.03.2016, 18:06
Цитата Сообщение от YakobsEA Посмотреть сообщение
у Вас питон 2-й версии возможно?
версия 3.4
Цитата Сообщение от YakobsEA Посмотреть сообщение
Python
1
a1 = [*zip(*a)]
это, кстати, выдает ту же ошибку
Цитата Сообщение от YakobsEA Посмотреть сообщение
Попробуйте задать матрицу 3 на 3 из единиц...
Задал, выдала правильный результат. В чем проблема?

Кстати обнаружил ошибку в прошлой программе, забыл i на pos1 поменять
Python
1
2
3
4
5
6
7
8
9
10
11
n,l=map(int, input().split())
matrix=[(input().split()+['0']*l)[:l] for _ in range(n)]
rev_matrix=[[matrix[j][i] for j in range(n)] for i in range(l)] 
 
for pos1 in range(n):
    pos2=matrix[pos1].index(max(matrix[pos1]))
    if (max(matrix[pos1]) == min(rev_matrix[pos2])):
        matrix[pos1][pos2]+='!'
 
for line in matrix: 
    print(*line)
0
 Аватар для YakobsEA
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
02.03.2016, 06:09
Whost, у меня 3.5.1
Вот она причина:

PEP 448 - Additional Unpacking Generalizations
PEP 448 extends the allowed uses of the * iterable unpacking operator and ** dictionary unpacking operator. It is now possible to use an arbitrary number of unpackings in function calls:

Python
1
2
3
4
5
6
7
8
9
>>> print(*[1], *[2], 3, *[4, 5])
1 2 3 4 5
 
>>> def fn(a, b, c, d):
...     print(a, b, c, d)
...
 
>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
02.03.2016, 11:18
Как-то так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
import numpy as np
 
arr = np.array([
    [9, 16, 9],
    [2, 6, 8],
    [9, 16, 9]])
min_str = np.max(arr, axis=1)
min_str_idx = np.argmin(min_str)
 
max_col = np.min(arr, axis=0)
max_col_idx = np.argmax(max_col)
# нашли элемент, подозрительный на седловой. Проверяем.
print min_str_idx, max_col_idx
if np.argmax(arr[min_str_idx, :]) == max_col_idx and np.argmin(arr[:, max_col_idx]) == min_str_idx:
    print "wow, we found it!", min_str_idx, max_col_idx
else:
    print "Sorry, no saddle"
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
02.03.2016, 13:57
YakobsEA, понятно. Удобная фича кстати, давно такую хотел
0
 Аватар для YakobsEA
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
02.03.2016, 14:04
Whost, так напрашивается сама собой!
Я так сделал исключительно по неопытности. Не знал, что нельзя. )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2016, 14:04
Помогаю со студенческими работами здесь

Найти седловую точку в матрице
Не могу никак сообразить, как искать седловую точку в матрице (седловая точка - элемент, который является минимальным в строке и...

Найти седловую точку в матрице
С клавиатуры вводится размер матрицы (количество строк и столбцов) и сами элементы матрицы. Необходима проверка введенных данных. Если в...

В матрице порядка n найти седловую точку
В матрице порядка n найти седловую точку (элемент максимальный в строке и минимальный в столбце). #include&lt;stdio.h&gt; ...

Найти седловую точку в матрице. Использование функций
Элемент матрицы является седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот: наибольшим...

В заданной матрице найти седловую точку и вернуть ее значение и координаты
В заданной матрице найти седловую точку и вернуть ее значение и координаты (оформит в виде функции). Точка называется седловой, если она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru