Форум программистов, компьютерный форум CyberForum.ru

Вывести номера всех седловых точек матрицы - C++

Восстановить пароль Регистрация
 
tatzah
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 3
03.12.2012, 06:42     Вывести номера всех седловых точек матрицы #1
написала код который должен считать 1) сумму элементов тех строк матрицы, в которых хотя бы один элемент отрицательный, 2) выводить номера всех седловых точек
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
 
using namespace std;
int main()
{
int n,m,found=0,max[100][3], min[100][3];
cin >> n>> m; //ввод размерности массива
int i,j;
int **a=new int*[n]; 
for(i=0;i<n;i++) a[i]=new int[m];
  for(i=0;i<n;i++) 
  for(j=0;j<m;j++) cin >>a[i][j];   //ввод массива
int flag,summ;   
summ=0;
for(i=0;i<n;i++) 
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
      for(j=0;j<m;j++)
    {
    summ=summ+a[i][j];
    }
}
 
cout<<summ<<" ";
    //Поиск седловых точек
for (i=0;i<n;i++)
{
    min[i][0]=a[i][0];
    min[i][1]=i;
    min[i][2]=0;
    for (j=1;j<m;j++)
        if(a[i][j]<min[i][0]) 
        {
            min[i][0]=a[i][j];//сам минимум в i-ой строке
            min[i][1]=i; //строка минимума
            min[i][2]=j; //столбец минимума
        }
}
 
for (j=0;j<m;j++)
{
    max[j][0]=a[0][j];
    max[j][0]=0;
    max[j][0]=j;
    for (i=1;i<n;i++)
        if(a[i][j]>max[j][0]) 
        {
            max[j][0]=a[i][j];// сам максимум в j-ом столбце
            max[j][1]=i; //строка максимума
            max[j][2]=j; //столбец максимума
        }
}
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
        cout <<min[i][j]<<" ";
cout <<endl;
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
        cout <<max[i][j]<<" ";
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
        if(min[i][0]==max[j][0] && min[i][1]==max[j][1] && min[i][2]==max[j][2])
        {   cout <<min[i][1]<<max[j][2];
        found++;}
 
     system ("PAUSE");  
return 0;
}
Но когда проверяю работоспособность кода (т.е формирую массивы min в строке и max в столбце "сам элемент", "его номер в строке" и "его номер в столбце" то выходит какая-то ерунда:
например размерность матрицы 3х3
0 -9 2
5 -1 0
1 -3 6
тогда массив min в строках будет такой:
-9 0 1
-1 1 1
-3 2 1
массив max в столбцах у меня получается
5 1 0
1 -858993460 -858993466
6 2 2

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

Добавлено через 6 часов 45 минут
кто-нибудь может помочь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 06:42     Вывести номера всех седловых точек матрицы
Посмотрите здесь:

C++ Номера строк и столбцов всех седловых точек матрицы
Найти номера строк и столбцов всех Седловых точек матрицы C++
C++ Определить номера строк и столбцов всех седловых точек матрицы
C++ Дана целочисленная прямоугольная матрица.Определить номера строк и столбцов всех седловых точек матрицы
C++ Определить номера строк и столбцов всех седловых точек матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.12.2012, 07:23     Вывести номера всех седловых точек матрицы #2
Цитата Сообщение от tatzah Посмотреть сообщение
C++
1
2
3
max[j][0]=a[0][j];
 max[j][0]=0;
 max[j][0]=j;
скорее всего тут ошибка так как меняется один и тотже элемент думаю надо было
C++
1
2
3
max[j][0]=a[0][j];
max[j][1]=0;
 max[j][2]=j;
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.12.2012, 07:30     Вывести номера всех седловых точек матрицы #3
вот результат, прищлось вывод немног откоректировать чтоб наглядней было
Миниатюры
Вывести номера всех седловых точек матрицы  
tatzah
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 3
04.12.2012, 19:32  [ТС]     Вывести номера всех седловых точек матрицы #4
У меня опять проблема, а если в заданном массиве, в строке ни одна минимальная точка, а например две, то мой код находит только первую, как сделать так что бы находились все точки.
например
Размерность массива 5х6
2 1 3 5 1 4
-7 0 -6 4 -1 2
4 1 3 2 1 1
-3 -2 0 1 -2 2
1 0 0 3 0 9
Тогда получается, что седловыми точками будут точки с координатами 0,1 0,4 2,1 и 2,4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
 
using namespace std;
int main()
{
int n,m,found=0,max[100][3], min[100][3];
cin >> n>> m; //ввод размерности массива
int i,j;
int **a=new int*[n]; 
for(i=0;i<n;i++) a[i]=new int[m];
  for(i=0;i<n;i++) 
  for(j=0;j<m;j++) cin >>a[i][j];   //ввод массива
int flag,summ;   
summ=0;
for(i=0;i<n;i++) 
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
      for(j=0;j<m;j++)
    {
    summ=summ+a[i][j];
    }
}
 
cout<<summ<<" ";
    //Поиск седловых точек
for (i=0;i<n;i++)
{
    min[i][0]=a[i][0];
    min[i][1]=i;
    min[i][2]=0;
    for (j=1;j<m;j++)
        if(a[i][j]<min[i][0]) 
        {
            min[i][0]=a[i][j];//сам минимум в i-ой строке
            min[i][1]=i; //строка минимума
            min[i][2]=j; //столбец минимума
        }
}
 
for (j=0;j<m;j++)
{
    max[j][0]=a[0][j];
    max[j][1]=0;
    max[j][2]=j;
    for (i=1;i<n;i++)
        if(a[i][j]>max[j][0]) 
        {
            max[j][0]=a[i][j];// сам максимум в j-ом столбце
            max[j][1]=i; //строка максимума
            max[j][2]=j; //столбец максимума
        }
}
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
for (i=0;i<n;i++)
    for (j=0;j<3;j++)
        if(min[i][0]==max[j][0] && min[i][1]==max[j][1] && min[i][2]==max[j][2])
        {   cout <<min[i][1]<<max[j][2];
        found++;}
 
     system ("PAUSE");  
return 0;
}
Этот код находит только 0,1 и 2,1
Подскажите, как исправить
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
04.12.2012, 20:16     Вывести номера всех седловых точек матрицы #5
ну чтоб вам помочь надо понимать алгоритм, и что такое эти седловые точки)
tatzah
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 3
04.12.2012, 21:07  [ТС]     Вывести номера всех седловых точек матрицы #6
седловая точка: минимальная в строке и максимальная в столбце
Yandex
Объявления
04.12.2012, 21:07     Вывести номера всех седловых точек матрицы
Ответ Создать тему
Опции темы

Текущее время: 03:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru