Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 22.07.2015
Сообщений: 36

Как можно упростить код?

08.11.2015, 21:09. Показов 1188. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание такое:

Дан двумерный массив map вещественных чисел, описывающий рельеф некоторой местности. Местность поделена на квадратные клетки, как шахматная доска. Значение в ячейке массива map[i][j] задает высоту клетки (i, j) над уровнем моря. Если высота больше либо равна нулю, то клетка находится над водой и является сушей. Если высота меньше нуля, то клетка находится под водой.

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

Пример

Для следующего массива

double[][] map = {
{-1, 0, 1},
{0, -1, 1},
{1, 0, -1}};

площадь максимального участка суши будет равна 3.
Подсказка: проще всего реализовать рекурсивный алгоритм.
Решение следующее:
Java
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
public static int maxLandSize(double[][] map) {
    int result = 0;
    for (int i = 0; i < map.length; i++) {
        for (int j = 0; j < map[i].length; j++) {
            if (map[i][j] >= 0) {
                boolean[][] v = new boolean[map.length][map[i].length]; v[i][j]=true;
                boolean[][] a = maxDry(map, i, j, v);
                int dryArea = area(a);
                if (dryArea > result) result = dryArea;
            }
        }
    }
    return result;
}
 
public static boolean[][] maxDry(double[][] map, int i, int j, boolean[][] visited) {
    boolean[][] result = visited.clone();
    int curDryArea = area(visited);
    
    if (i-1>=0 && visited[i-1][j]==false && map[i-1][j]>=0) {
        boolean[][] v = visited.clone(); v[i-1][j]=true;
        boolean[][] t = maxDry(map, i - 1, j, v);
        if (area(t) > curDryArea) result = t;
    }
    
    if (i+1<map.length && visited[i+1][j]==false && map[i+1][j]>=0) {
        boolean[][] v = visited.clone(); v[i+1][j]=true;
        boolean[][] t = maxDry(map, i + 1, j, v);
        if (area(t) > curDryArea) result = t;
    }
    
    if (j-1>=0 && visited[i][j-1]==false && map[i][j-1]>=0) {
        boolean[][] v = visited.clone(); v[i][j-1]=true;
        boolean[][] t = maxDry(map, i, j-1, v);
        if (area(t) > curDryArea) result = t;
    }
    
    if (j+1<map[i].length && visited[i][j+1]==false && map[i][j+1]>=0) {
        boolean[][] v = visited.clone(); v[i][j+1]=true;
        boolean[][] t = maxDry(map, i, j+1, v);
        if (area(t) > curDryArea) result = t;
    }
    
    return result;
}
 
public static int area(boolean[][] map) {
    int result = 0;
    for (int i = 0; i < map.length; i++) {
        for (int j = 0; j < map[i].length; j++) {
            if (map[i][j] == true) result++;
        }
    }
    return result;
}
Результат проверки:
Failed test #7. Time limit exceeded
Кто-нибудь может придумать как упростить данный код?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2015, 21:09
Ответы с готовыми решениями:

Как можно упростить код для обедающих философов и добавить описание действия для каждого философа?
import java.util.Random; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicInteger; public class...

Как можно упростить разбиение числа на цифры
Есть задача:Написать программу для вывода на экран сообщения о том, входит ли цифра M в десятичную запись данного четырехзначного числа N. ...

Упростить код
() if (type == 'i') { for (int i = 0; i &lt; dimension; i++) { for (int j = 0; j &lt; dimension; j++) { ...

2
1 / 1 / 0
Регистрация: 24.04.2015
Сообщений: 6
08.11.2015, 22:03
Та же фигня. Надо бы рекурсию...
0
08.11.2015, 23:49
 Комментарий модератора 
Для оффтопа есть спец. разделы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2015, 23:49
Помогаю со студенческими работами здесь

Упростить код
Всем Привет, У меня есть код , import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ...

Упростить код
Как можно упростить код public boolean isLiving() { if (weight &gt;= minWeight &amp;&amp; weight &lt;= maxWeight) { return true; } ...

Java чат - упростить код
Может кто-нибудь будет так добр и поможет упростить код чата, а то уж больно много классов получилось. Ну или просто поделитесь мыслями как...

Как можно переделать код?
У меня есть код и его нужно переделать таким образом, чтобы в нем все 3 принципа ООП : Инкапсуляция,Наследование,Полиморфизм. ...

Как можно использовать scan-код
кто знает? как можно использовать скен код


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля 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, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru