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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2007, 14:38   #1
Fuckin_Princess
 
Аватар для Fuckin_Princess
 
Регистрация: 27.11.2007
Сообщений: 4
Восклицание Задача про седловую точку матрицы (С++)

Помогите ламеру решить

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

Буду очень благодарна за помощь(:
Fuckin_Princess вне форума Ответить с цитированием
Старый 27.11.2007, 15:49   #2
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Fuckin_Princess Посмотреть сообщение
Буду очень благодарна за помощь(:
т.е ваша благодарность не будет иметь границ? и если границы будут то насколько они реальны? Т.е я имею ввиду реальна ли ваша благодарность? Ну в обсчем задача не сложная просто не ccccт
PuzzleC вне форума Ответить с цитированием
Старый 27.11.2007, 17:20   #3
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

Ну вот пока только ищет седловое число
Код:
#include<iostream.h>
#include<iomanip.h>

#include<conio.h>
#include<stdio.h>
#include<time.h>

using namespace std;




/**
* генерирует случайное число в диапазоне a-b
**/
time_t t;
int randsens = 0;
int automata( int a, int b )
 {
    int x;
    if( randsens == 0 ) 
     {
     srand( (unsigned)time(&t) ); ++randsens;
     }
    for( ;; )
     {
     x = rand() % b;
     if( a < 0 && (rand() % 10)>5 )
      x-=(x*2);

     if( x >= a )
      break;
     }
    return x;
 }




 
/**
* Создает массив случайного размера и заполняет его случайными числами
**/
int *randomadd( int arraysize )
 {
    int *_array;
    _array = (int *) malloc (arraysize*sizeof(int));
    for( int i=0; i<arraysize; i++ )
     {
     _array[ i ] = automata( 0, 20 );
     }
 return _array;
 }


/**
* Ищет седловое число
**/
int Mindex=-1, Nindex=-1;
int saddle( int **_array, int size_N, int size_M )
 {
    int i, j, c, q, maxbyN=0, maxbyM=0, sens=0; 

    for( i=0; i<size_N; i++ ) // шагать по рядам сверху вниз
     {

     for( j=0; j<size_M; j++ ) // шагать по ряду слева направо
      {
      if( maxbyM<_array[ i ][ j ] )
       {
       maxbyM = _array[ i ][ j ]; // искать максимальный элемент ряда
       Mindex = j;
       }
      }

     if( Mindex>-1 )
      {
      for( c=0; c<size_N; c++ ) // шагать по определенному столбцу сверху вниз
       {
       if( maxbyN>_array[ c ][ Mindex ] )
        {
        maxbyN = _array[ c ][ Mindex ]; // искать минимальный элемент столбца
        Nindex = c;
        }
       }
      }

     if( Mindex == Nindex ) // значит найдено седловое число
      {
      ++sens;
      break; // выскочить из цикла
      }

     }
 
 if( sens>0 ) 
     return 1;
 else
     return 0;
 }






int main() 
 {
    int **_array, saddlep=0, size_N=0, size_M=0, i, j;

    // создание массива
   size_N = automata( 2, 20 ); // рядов будет от 0 до 20 (случайно)
   size_M = automata( 1, 40 ); // столбцев будет от 0 до 40 (случайно)

   _array = ( int **) malloc ( size_N*sizeof(int) );

   for( i=0; i<size_N; i++ )
    {
    _array[ i ] = randomadd( size_M ); // заполнять
    }

   saddlep = saddle( _array, size_N, size_M );

   for( i=0; i<size_N; i++ )
    {
    for( j=0; j<size_M; j++ )
     {
     cout << setw(3) << _array[ i ][ j ] << " ";
     }
    cout << endl;
    }


   if( saddlep )
    {
    cout << "_array[ " << Nindex << " ][" << Mindex << " ]" << " =" << _array[ Nindex ][ Mindex ] << endl;
    }
   else
    {
    cout << "None Suddle Number!" << endl;
    }


    // . . . .

    free( _array );
    getch();
 return 0;
 }
PuzzleC вне форума Ответить с цитированием
Старый 28.11.2007, 16:39   #4
Fuckin_Princess
 
Аватар для Fuckin_Princess
 
Регистрация: 27.11.2007
Сообщений: 4
По умолчанию Хм:)

Спасибо) только вот седловую точку саму по себе я искать умею.. проблема в том что я не знаю как определить какой элемент заменить и как
Fuckin_Princess вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на матрицы щдуп Паскаль, Turbo Pascal, PascalABC.NET 3 26.06.2008 08:52
Задача на матрицы и массивы kaliha Помощь студентам 3 17.01.2008 23:46
Задача на матрицы Integral Паскаль, Turbo Pascal, PascalABC.NET 1 12.12.2007 13:32
Задача с вводом матрицы на С Aero Помощь студентам 1 28.10.2007 14:50