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

Найти "max" среди всех локальных минимумов данной матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка функций http://www.cyberforum.ru/cpp-beginners/thread406439.html
Помогите пж с задачкой на С++: Определить функцию Search(), осуществляющую поиск в массиве максимального элемента. . Перегрузить функцию Search() для поиска n-ого максимального элемента.
C++ Работа с массивами Помогите плиз написать программу на С Задача: Задан двухмерный массив действительных чисел (квадратная матрица А размером NxN (6<=N<=10)), который содержит в себе действительные элементы. Входные данные задать самостоятельно Задание: Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент. http://www.cyberforum.ru/cpp-beginners/thread406428.html
C++ Сравнение строк (с игнорированием множественных пробелов)
Помогите плиз написать функцию и саму программу на С Задание: Функция WordCmp(s1,s2) Назначение: сравнение строк (с игнорированием множественных пробелов).
C++ коротчайший путь
задается массив NxN нужно найти коротчайший путь от позиции 1х1 до NxN и обозначить путь символом # а все остальное символов - .коротчайший путь считается тот ,сумма чисел которых минимальна и двигаться можно только вправо и вниз . пример вводим вывод 3 943 #-- 216 ### 091 --#
C++ В массиве A=(a1, а2, ..., аn) удалить последнюю группу положительных элементов. http://www.cyberforum.ru/cpp-beginners/thread406405.html
В массиве A=(a1, а2, ..., аn) удалить последнюю группу положительных элементов. Группой называется подряд идущие элементы одного знака, число которых больше или равно 2.Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.Как можно более полно...
C++ Из класса в класс-шаблон Здравствуйте. Есть класс: class Bit_Indic { char indic; public: Bit_Indic (char _one, char _two, char _three, char _four, char _five, char _six, char _seven, char _eight) { indic = _one; indic = _two; indic = _three; подробнее

Показать сообщение отдельно
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
15.12.2011, 02:28     Найти "max" среди всех локальных минимумов данной матрицы
6blgJlo'KOgeP, жесть. Я сразу не заметил какой минимум надо искать, сейчас вижу. ваш подход мегабрутал. Позже напишу функцию поиска

Добавлено через 3 часа 33 минуты
Цитата Сообщение от 6blgJlo'KOgeP Посмотреть сообщение
void* allocateMatrixMemory
какого типа функция? и какой тип она возвращает. вот готовая программа
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
void *create(size_t num, size_t size)
{
    void *t = (void *) malloc ( num * size );
    if ( t == NULL )
        exit(EXIT_FAILURE);
    else
        return t;
}
 
int comp(const void *i, const void *j)
{
  return *(int *)i - *(int *)j;
}
 
char is_local_min ( int **array, int val, size_t i, size_t j, size_t n, size_t m )
{
    int row_beg = ( i ) ? i - 1 : i;
    int row_end = ( i == ( n - 1 ) ) ? i : i + 1;
    int col_beg = ( j ) ? j - 1 : j;
    int col_end = ( j == ( m - 1 ) ) ? j : j + 1;
    int row_iter, col_iter;
 
    for ( row_iter = row_beg; row_iter <= row_end; ++ row_iter )
        for ( col_iter = col_beg; col_iter <= col_end; ++col_iter )
            if ( array[ row_iter ][ col_iter ] < val )
                return 0;
            else if ( ( array[ row_iter ][ col_iter ] == val ) &&  ( row_iter ^ i ) && ( col_iter ^ j ) )
                return 0;
    return 1;
}
 
void find_max_from_localmin ( int **array, size_t n, size_t m, int *num, char *flag )
{
    int i, j;
    int cnt = 1, *t = NULL;
 
    for ( i = 0; i < n; ++i )
        for ( j = 0; j < m; ++j )
            if ( is_local_min ( array, array[ i ][ j ], i, j, n, m ) )
            {
                t = realloc ( t, cnt * sizeof( int ) );
                if ( t == NULL )
                    exit ( EXIT_FAILURE );
                else
                {
                    t[ cnt - 1 ] = array[ i ][ j ];
                    ++cnt;
                }
            }
    if ( t )
    {
        qsort ( t, --cnt, sizeof( int ), comp );
        *num = t [ --cnt ];
        *flag = 1;
    }
    else
        *flag = 0;
    free ( t );
}
 
void init_random ( int **array, size_t n, size_t m, int mod )
{
    int i = 0, j;
    for ( i; i < n; ++i )
        for ( j = 0; j < m; ++j )
            array[ i ][ j ] = rand() % mod;
}
 
main(void)
{
    size_t size = 10;
    int **matrix;
    int i = 0, j, number;
    char flag = 0;
    srand ( time ( 0 ) );
 
    matrix = (int**) create ( size, sizeof( int* ) );
    while ( i++ < size )
        matrix[ i - 1 ] = (int*) create ( size, sizeof ( int ) );
 
    init_random ( matrix, size, size, 50 );
 
    for ( i = 0; i < size; ++i )
    {
        for ( j = 0; j < size; ++j )
            printf( "%3i", matrix[ i ][ j ] );
        puts("");
    }
    puts("");
 
    find_max_from_localmin ( matrix, size, size, &number, &flag );
    if ( flag )
        printf ( "\nискомое число %i ", number );
    else
        puts("");
 
    for ( i = 0; i < size; ++i )
        free ( matrix[ i ] );
    free( matrix );
 
    exit(EXIT_SUCCESS);
}
 
Текущее время: 07:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru