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

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

08.11.2015, 21:09. Показов 1156. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru