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

Рекурсия для двумерного массива - C++

Восстановить пароль Регистрация
 
TheAlpha
6 / 6 / 2
Регистрация: 03.01.2013
Сообщений: 113
17.02.2013, 17:00     Рекурсия для двумерного массива #1
Всем доброго времени суток. Мне нужно написать рекурсивную функцию для нахождения минимального значения в двумерном массиве.
Я могу написать только для одномерного, там ничего сложного нету. Но вот с двумерным - никак не получается. Можете подсказать алгоритм или дать ссылку на теорию, если имеется.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
17.02.2013, 17:17     Рекурсия для двумерного массива #2
Писать сейчас эту функцию лень, но смысл таков: идешь от элемента ( 0; 0 ) в две стороны ( вправо и вниз ) и сравниваешь эти два значения. Дальше просто передаешь в рекурсию соответствующие координаты правой и нижней точки. Конечно, проверяя текущую позицию на выход за границы.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
17.02.2013, 17:58     Рекурсия для двумерного массива #3
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int min( int **arr, const int size ) {
    static int val = 100;
    static int x = 0;
    static int y = 0;
    if( arr[x][y] < val)
        val = arr[x][y];
    x++;
    if( x >= size){
        y++;
        x = 0;
    }
    return y >= size ? val :    min( arr, size );
}
 
int main() {
    srand( time ( NULL ) + rand());
    const int size = 5;
    int **arr = new int*[ size ];
    for( int i = 0; i < size; i++)
        arr[ i ] = new int[ size ];
    for( int i = 0; i < size; i++, std::cout << std::endl){
        for( int j = 0; j < size; j++){
            arr[i][j] = 1 + rand() % 100;
            std::cout << arr[i][j] << " ";
        }
    }
 
    std::cout << min( arr, size);
    return 0;
}
коряво, но работает
TheAlpha
6 / 6 / 2
Регистрация: 03.01.2013
Сообщений: 113
17.02.2013, 18:51  [ТС]     Рекурсия для двумерного массива #4
Цитата Сообщение от coloc Посмотреть сообщение
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int min( int **arr, const int size ) {
    static int val = 100;
    static int x = 0;
    static int y = 0;
    if( arr[x][y] < val)
        val = arr[x][y];
    x++;
    if( x >= size){
        y++;
        x = 0;
    }
    return y >= size ? val :    min( arr, size );
}
 
int main() {
    srand( time ( NULL ) + rand());
    const int size = 5;
    int **arr = new int*[ size ];
    for( int i = 0; i < size; i++)
        arr[ i ] = new int[ size ];
    for( int i = 0; i < size; i++, std::cout << std::endl){
        for( int j = 0; j < size; j++){
            arr[i][j] = 1 + rand() % 100;
            std::cout << arr[i][j] << " ";
        }
    }
 
    std::cout << min( arr, size);
    return 0;
}
коряво, но работает
Интересный способ заполнения массива, я раньше сталкивался с подобным, но сам никогда не работал. Можете описать как он работает или ссылочку на теорию ?
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
17.02.2013, 19:03     Рекурсия для двумерного массива #5
Псевдослучайные числа.
C++
1
2
3
4
5
srand( time ( NULL ) + rand()); //для того чтобы каждый раз генерировались другие значения 
for( int i = 0; i < size; i++, std::cout << std::endl){
        for( int j = 0; j < size; j++){
            arr[i][j] = 1 + rand() % 100;//генерируется число для каждого элемента, где 1-минимальное число,
                                                  //а 100-максимальное.
rand() возвращает псевдослучайное число, которое зависит от того числа, которое указано в srand.
Yandex
Объявления
17.02.2013, 19:03     Рекурсия для двумерного массива
Ответ Создать тему
Опции темы

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