powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
25 сообщений из 421, страница 6 из 17
Задачка про остров
    #39925394
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каюсь.
Каждый раз, когда мне эта задача встречается - у заказчика руки опускаются , он даже не может приоритеты важности расставить (привет менеджерам, это технолог делает, когда его в процесс включают, а не пилят ком. пердложения, торговые сделки).

Самое примитивное. Оператор тыкает - пустить закачку из Р1 в Р5.
Р1-Н2-Р5 (завдвижки я не рисовал) перекроет работу всего остального, а вот если пустить через насос Н1, то Н2 еще можно испльзовать для Р3 Н2 Р6.
Р1--|___Н1--|___Р4
Р2--|___Н2--|___Р5
Р3--| |___Р6

Это комплексаная проблема, которую долго можно жевать.
Пока никто даже системного подхода не описал народе:
1 Опишите в схеме потсоянные маршруты, котрые будут использоваться всегда.
2 Максимальную длину
и так далее и тому подобное.

Все сейчас сводится к проверке линий (аля не потекет ли бензин в ДТ, потому что задвижку забыли закрыть или не тот насос запустили).
...
Рейтинг: 0 / 0
Задачка про остров
    #39925404
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тему графов. Предложу 2 инварианта.

Для данной сущности.

Код: java
1.
2.
3.
4.
5.
6.
7.
interface ICell {

  int getHeight();
  int getWaterLine();
  ICell<Iterable> neighbours();

}



1) Каков-бы не был уровень воды - уровень земли меньше либо равен уровню воды в этой ячейке.

Код: sql
1.
height <= waterLine



2) Все соседние ячейки с одинаковым уровнем земли (и соседние по отношению к соседним)
всегда имеют одинаковый уровень воды.

(он может быть неодинаковым в вашем алгоритме на какой-то итерации. Но после
достижения стационарного состояния алгоритма в целом - это будет так)


Отсюда вытекает интересное преобразование.

Группу связных вершин графа имеющих одинаковый параметр height мы можем заменить на 1 единственную
вершину топологически связную с соседями данной группы.

С точки зрения картинки - не меняется ничего. Но алгоритм упрощается. Мы выбрасываем целое "плато"
столбиков с одинаковой высотой и заменяем его на 1 виртуальный столбик который имеет neightbours()
существенно больше чем 4 или 6. Но для нас это неважно.

Тоесть для ландшафтов с большим количеством плато объем вычислений прилиовов и отливов может быть
существенно сокращен за счет такого топологического преобразования.
...
Рейтинг: 0 / 0
Задачка про остров
    #39925421
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько моих способностей хватило изобразил пример для тестирования
...
Рейтинг: 0 / 0
Задачка про остров
    #39925425
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Четырехсвязный узел для графа
Код: 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.
public class Node {

    public final int NUMBER_OF_NEIGHBOURS;
    private int height;
    private String status;

    private Node[] neighbours;

    public Node(int height) {
        this(height, 4);
    }

    public Node(int height, int NUMBER_OF_NEIGHBOURS) {
        this.NUMBER_OF_NEIGHBOURS = NUMBER_OF_NEIGHBOURS;
        this.height = height;
        this.neighbours = new Node[this.NUMBER_OF_NEIGHBOURS];
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public void setNeighbours(Node[] neighbours) {
        this.neighbours = neighbours;
    }

    public Node getNeighbour(int neighbour) {
        return neighbours[neighbour];
    }

    public void setNeighbour(int neighbour, Node node) {
        this.neighbours[neighbour] = node;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return Integer.toString(this.height);
    }
}

...
Рейтинг: 0 / 0
Задачка про остров
    #39925443
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
...
Р1--|___Н1--|___Р4
Р2--|___Н2--|___Р5
Р3--| |___Р6
Это комплексаная проблема, которую долго можно жевать.
...
Что мешает свести к (например)выпуклой задаче минимизации с выпуклыми же ограничениями?.. Вообще, расписаны уже все ограничения или как всегда разбросаны в головах? Какие показатели и как оптимизировать?..
Что в задаче навроде переменных (флажки ...), а что навроде относительно статических "справочников" (содержимое Р(i) )?..............
...
Рейтинг: 0 / 0
Задачка про остров
    #39925444
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
АСУ ТПшник
...
Р1--|___Н1--|___Р4
Р2--|___Н2--|___Р5
Р3--| |___Р6
Это комплексаная проблема, которую долго можно жевать.
...
Что мешает свести к (например)выпуклой задаче минимизации с выпуклыми же ограничениями?.. Вообще, расписаны уже все ограничения или как всегда разбросаны в головах? Какие показатели и как оптимизировать?..
Что в задаче навроде переменных (флажки ...), а что навроде относительно статических "справочников" (содержимое Р(i) )?..............

Что-то вроде Форда Фалкерсона по расчету потока. Если вентили - неуправляемые.
Если управляемые - то неясна цель управления? Максимальная загрузка?
Загрузка чего? Насосов? Или всей сети?

Тут нельзя так вот небрежно бросаться заданиями. Это-ж неуважение к читающему.
Тут люди рады решать головоломки но зачем-же их заставлять додумывать ?
...
Рейтинг: 0 / 0
Задачка про остров
    #39925583
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи в головах.
Забейте. Не тратьте время.
Было бы все прописано , я бы уже озолотился.
...
Рейтинг: 0 / 0
Задачка про остров
    #39925585
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как будет угодно. Ты если захочешь ее поставить - лучше отдельным топиком.
...
Рейтинг: 0 / 0
Задачка про остров
    #39925850
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Четырехсвязный узел для графа
Код: 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.
public class Node {

    public final int NUMBER_OF_NEIGHBOURS;
    private int height;
    private String status;

    private Node[] neighbours;

    public Node(int height) {
        this(height, 4);
    }

    public Node(int height, int NUMBER_OF_NEIGHBOURS) {
        this.NUMBER_OF_NEIGHBOURS = NUMBER_OF_NEIGHBOURS;
        this.height = height;
        this.neighbours = new Node[this.NUMBER_OF_NEIGHBOURS];
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public void setNeighbours(Node[] neighbours) {
        this.neighbours = neighbours;
    }

    public Node getNeighbour(int neighbour) {
        return neighbours[neighbour];
    }

    public void setNeighbour(int neighbour, Node node) {
        this.neighbours[neighbour] = node;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return Integer.toString(this.height);
    }
}


Тут лучше всё таки не класс а интерфейс. Чтобы иметь разные реализации.
Ябы предложил так.

Код: java
1.
2.
3.
INode
 +- BitmapImageNode
 +- HexagonTextFileNode



Что это дает.

Это даёт обобщенный алгоритм. И возможность оптимизаций по памяти. +Шаблон Flyweight.
Как оптимизация системы хранения. Нам не обязательно хранить Node для каждого пиксела
картинки. Достаточно к картинке предоставлять INode интерфейс.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926010
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задаем V = 0;
1) строим ориентированный граф у которого вершины - шестиугольники, а каждое ребро ведет от одной вершины к другой если соответствующие шестиугольники примыкают и высота первого больше чем высота второго.
2) ищем любую вершину которая не примыкает к морю и имеет только входящие ребра, причем хотя бы одно
3) если на 2 вершина не найдена, то результат в V
4) к найденной вершине добавляем к высоте 1 и увеличиваем V на 1
5) повторяем все начиная с шага 1

Можно, конечно, еще оптимизировать, если вместе с найденной вершиной захватывать все которые достижимы из неё (не по нашему графу, а просто по граням шестиугольников) и у которых текущая высота такая же как у найденной и увеличивать не на 1, а на большее значение анализируя прилегающие к ним.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926018
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
1) строим ориентированный граф у которого вершины - шестиугольники, а каждое ребро ведет от одной вершины к другой если соответствующие шестиугольники примыкают и высота первого больше чем высота второго.
2) ищем любую вершину которая не примыкает к морю и имеет только входящие ребра, причем хотя бы одно
допустим, у найденной вершины высота равна 2, но к ней может вести дорожка высотой тоже 2, которая упирается в море. Тогда на этой ячейке воды не останется
...
Рейтинг: 0 / 0
Задачка про остров
    #39926040
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
fkthat
1) строим ориентированный граф у которого вершины - шестиугольники, а каждое ребро ведет от одной вершины к другой если соответствующие шестиугольники примыкают и высота первого больше чем высота второго.
2) ищем любую вершину которая не примыкает к морю и имеет только входящие ребра, причем хотя бы одно
допустим, у найденной вершины высота равна 2, но к ней может вести дорожка высотой тоже 2, которая упирается в море. Тогда на этой ячейке воды не останется


Да, точно, не учел. Ну что же буду думать дальше. :)
...
Рейтинг: 0 / 0
Задачка про остров
    #39926201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
задаем V = 0;
1) строим ориентированный граф у которого вершины - шестиугольники, а каждое ребро ведет от одной вершины к другой если соответствующие шестиугольники примыкают и высота первого больше чем высота второго.

Орграф нас ограничивает IMHO.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat

Можно, конечно, еще оптимизировать, если вместе с найденной вершиной захватывать все которые достижимы из неё (не по нашему графу, а просто по граням шестиугольников) и у которых текущая высота такая же как у найденной и увеличивать не на 1, а на большее значение анализируя прилегающие к ним.

Смотрите. По поводу любых идей оптимизирующих или трансформирующих сам граф.

Вы должны доказать что ваше преобразование по complexity будет дешевле чем "лобовое" решение задачи сходу.
Сюда-же до кучи моё предложение по свёртке одинаковых высот в кучу.

Тоесть 2 варианта.
1) Решение задачи 1 раз в лоб любым алгоритмом.
2) Оптимизация ландшафта до некого упрощенного графа. И многокраное решение задачи прилива-отлива.
Только я не уверен что автор топика такое многократное решение прилива заказывал.

Понимаете да? Это как построение индекса по таблице в БД. Одноразово - неэффективно. А эффективно при
периодических использованиях.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926241
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, еще один вариант решения.

1) Находим максимальную высоту шестиугольников
2) Каждому шестиугольнику присваиваем число (назовем его "теущей высотой", в отличии от просто "высоты" заданной в условиях задачи) равное максимальной высоте из п.1
3) Начало цикла
4) Ищем любой шестиугольник который имеет "текущую высоту" больше своей "высоты" и либо:
а) Граничит с морем
б) Имеет хоть один соседний шестиугольник с меньшей "текущей высотой"
5) Если на п.4. мы такого шестиугольник не нашли, то выходим из цикла
6) Иначе, Если на п.4. найден шестиугольник который граничит с морем, то устанавливаем его "текущую высотуо" равную его "высоте"
7) Иначе устанавливаем значение его "текущей высоты" в значение максимальное из его "высоты" и минимальной "текущей высоты" всех его соседей.
8) Возвращаемся в начало цикла
9) Здесь мы вышли из цикла
10) Суммируем по всем шестиугольникам разницы между их "текущей высотой" и "высотой" - это и будет результат (объем луж).
...
Рейтинг: 0 / 0
Задачка про остров
    #39926275
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде верно.
Кстати, на определенных этапах корректировка "текущей высоты" будет распространяться от краёв, как тут 22077648
...
Рейтинг: 0 / 0
Задачка про остров
    #39926333
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже на вариант с "текущей высотой" - сортируем ячейки по высоте, затем последовательно наполняем каждую дельту высот:
Код: pascal
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.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
type
  TCell= record
    cx, cy, cz: integer;
    next: integer;
    end;

var
  c: array of TCell;
  ndx: array of array of integer;
  h: array[0..4, 0..4] of integer= (
    (0,1,4,3,0),
     (1,5,1,5,0),
    (2,3,2,4,6),
     (2,6,4,2,0),
    (0,3,1,2,0));

procedure SortCells;
var
  i, j, k: integer;
  t: TCell;
begin;
  k:=Length(c)-1;
  if k<=0 then exit;
  j:=k; i:=j;
  repeat;
    dec(i);
    if c[i].cz>c[j].cz then j:=i;
    until i<=0;
  if j<>k then begin;
    t:=c[j]; c[j]:=c[k]; c[k]:=t;
    end;

  i:=k-1;
  while i>0 do begin;
    j:=i; dec(i);
    if c[i].cz>c[j].cz then begin;
      repeat;
        inc(j);
        until not (c[i].cz>c[j].cz);
      dec(j);
      t:=c[i];
      for k:=i to j-1 do c[k]:=c[k+1];
      c[j]:=t;
      end;
    end;
  end;

procedure ReadCells;
var
  x, y, xcount, ycount, i: integer;
begin;
  ycount:=Length(h);
  xcount:=Length(h[0]);
  SetLength(c, ycount*xcount);
  for y:=0 to ycount-1 do for x:=0 to xcount-1 do with c[y*xcount + x] do begin;
    cx:=x; cy:=y; cz:=h[y,x];
    end;
  SortCells;
  SetLength(ndx, ycount, xcount);
  for i:=0 to Length(c)-1 do ndx[c[i].cy, c[i].cx]:=i;
  end;

function Neighbour(i, j: integer): integer;
var
  x, y, d: integer;
begin;
  Result:=-1;
  x:=c[i].cx;
  y:=c[i].cy;
  d:=0; if y and 1=0 then d:=-1;
  case j of
    0: begin; x:=x+d; y:=y-1; end;
    1: begin; x:=x+d+1; y:=y-1; end;
    2: x:=x-1;
    3: x:=x+1;
    4: begin; x:=x+d; y:=y+1; end;
    5: begin; x:=x+d+1; y:=y+1; end;
    else begin; x:=-1; y:=-1; end;
    end;
  if (y>=0) and (y<Length(ndx)) and (x>=0) and (x<Length(ndx[0])) then Result:=ndx[y,x];
  end;

function CountCells(last: integer): integer;
var
  i, j, n, k, sum: integer;
begin;
  Result:=0;
  for i:=0 to last do begin;
    c[i].next:=i;
    for j:=0 to 5 do begin;
      n:=Neighbour(i,j);
      if n<0 then c[i].next:=-1
      else if n<i then begin;
        repeat;
          k:=n; n:=c[n].next;
          until (k=n) or (n<0);
        if n<0 then c[i].next:=-1 else c[n].next:=i;
        end;
      end;
    end;
  for i:=0 to last do begin;
    sum:=0; n:=i;
    repeat;
      inc(sum);
      k:=n; n:=c[n].next;
      if k>=0 then c[k].next:=-1;
      until (k=n) or (n<0);
    if n>=0 then
    Result:=Result+sum;
    end;
  end;

function FillCells: integer;
var
  i, dz: integer;
begin;
  Result:=0;
  ReadCells;
  for i:=0 to Length(c)-2 do begin;
    dz:=c[i+1].cz - c[i].cz;
    if dz>0 then
    Result:=Result + dz * CountCells(i);
    end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin;
  Memo1.Lines.Add(IntToStr(FillCells));
  end;

...
Рейтинг: 0 / 0
Задачка про остров
    #39926392
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая портянка, мне вот трудно читать, ибо не приучен.
А суть в чем?

Есть идея - а можно ли перепрыгнуть с точек и их уровней, на наклоны соединений между клетками? Ну т.е. простейший случай - 8657. Два выхода к морю в двухмерном пространстве. 8->6 наклон отрицательный. 6->5 отрицательный.7->5 отрицательный. Наклон может быть суммирующимся.

Подозреваю что можно , через суммирование весов каждого наклона типа 8 против 5 - вода не вытечет, но не уверен в целессобразности.

Т.е. идея какая - кратчайший путь от центра к низинам или от моря к самой высокой точке по А алгоритму с правилом каким-то, а потом веса наклонов считать.

Был пьян, вспылил :D
...
Рейтинг: 0 / 0
Задачка про остров
    #39926402
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для всех ячеек и их ближних соседей.

Инвариант - вода течет вниз. Ивариант вода не ниже чем дно. Инвариант. Любая вода - не ниже чем океан.

Всё остальное - только имплементация этих правил в виде кода + эвристики и предположения.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926409
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИнвариант - вода течет вниз. Ивариант вода не ниже чем дно. Инвариант. Любая вода - не ниже чем океан.
ТЗ какбы само собой (не очень понял при чем тут инвариант).
Но вот лужа никогда не нижу уровня моря - "искусственно" несколько, почему бы и нет?

Разовью мысль.
"Практическое" решение уже нашлось.
В области теории всего обо всем,42, оно как бы отсекает абсолютно нейтральный подход - мы не знаем чего будем анализировать. Т.е. получается уже искусственные ограничения для искусственной же задачи. Зачем? Очень уверен, что лужа глубже уровня моря может быть без значительного усложнения.

Задача так-то вырождается вообще в простой вопрос.

Определить области, откуда при неизменности силы притяжения и барьеров (чтобы вода не текла), остров, вынутый за ручку вверх сможет сохранить часть воды , как-то алгоритмически проанализировать и решить как можно более простым способом. наиболее понятным способом.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926411
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
Хорошая портянка, мне вот трудно читать, ибо не приучен.
А суть в чем?


Извини, не смог уложиться в 5 строк.

Суть, как сказано в преамбуле перед портянкой, в том,
что мы будем вместо одной сложной задачи
последовательно решать более простые задачи,
по одной для каждого изменения высоты ячейки.

АСУ ТПшник
Есть идея - а можно ли перепрыгнуть с точек и их уровней, на наклоны соединений между клетками? Ну т.е. простейший случай - 8657. Два выхода к морю в двухмерном пространстве. 8->6 наклон отрицательный. 6->5 отрицательный.7->5 отрицательный. Наклон может быть суммирующимся.

Подозреваю что можно , через суммирование весов каждого наклона типа 8 против 5 - вода не вытечет, но не уверен в целессобразности.

Т.е. идея какая - кратчайший путь от центра к низинам или от моря к самой высокой точке по А алгоритму с правилом каким-то, а потом веса наклонов считать.

Был пьян, вспылил :D


С нетерпением жду реализации в 5 строк этой замечательной идеи.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926414
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторС нетерпением жду реализации в 5 строк этой замечательной идеи.
Вода должна оставаться в луже :D
А серьезно - куча реализаций может быть. Но суть в том, что ваш код даже без комментариев. Чего он там и зачем делает, концептуально непонятно, реверс инжиниринг - ну извините, лень. Тут как-то на интуитивно понятном языке обходились пока не влез ОраклДевелопер, который приделал к переменным геттеры и сеттеры
...
Рейтинг: 0 / 0
Задачка про остров
    #39926416
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчто мы будем вместо одной сложной задачи
последовательно решать более простые задачи,
Не уследил за изложением в сообщениях. По утру попробую.
...
Рейтинг: 0 / 0
Задачка про остров
    #39926425
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
авторС нетерпением жду реализации в 5 строк этой замечательной идеи.

Вода должна оставаться в луже :D
А серьезно - куча реализаций может быть. Но суть в том, что ваш код даже без комментариев. Чего он там и зачем делает, концептуально непонятно, реверс инжиниринг - ну извините, лень...

Их есть у меня:
Код: pascal
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.
type
  TCell= record                                 //типа ячейка, а то еще подумаете че-нить другое
    cx, cy, cz: integer;                       //координаты в нашем трехмерном мире, а вы че думали?
    next: integer;                              //ячейка, куда повелеваю течь воде, (если -1, то вытекает нафиг)
    end;

var
  c: array of TCell;                            //отсортированные по высоте ячейки, тип как бы намекает
  ndx: array of array of integer;         //индекс для быстрого поиска ячейки по паре координат (x,y), имя как бы ниочем
  h: array[0..4, 0..4] of integer= (     //что это, я вообще не знаю
    (0,1,4,3,0),
     (1,5,1,5,0),
    (2,3,2,4,6),
     (2,6,4,2,0),
    (0,3,1,2,0));

procedure SortCells;                         //заполняет массив c на основе карты высот, реализация любая

procedure ReadCells;                        //читает карту высот, вызывает SortCells, формирует ndx

function Neighbour(i, j: integer): integer;  //для i-той ячейки возвращает номер j-того соседа, или -1, но это нифига не очевидно 

function CountCells(last: integer): integer;  //считает ячейки в интервале [0..last] из которых не течет до высоты ячейки с[last+1]

function FillCells: integer;                 //считает общий объем воды, как сумму объемов в каждом срезе 
                                                      //на что намекает оператор в теле: Result:=Result + dz * CountCells(i);
...
Рейтинг: 0 / 0
Задачка про остров
    #39926489
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня где-то была своя имплементация алгоритма diamong-square на С++.
Потерял код к сожалению. Но она не для решения этой задачи а просто
для генерации реалистичных карт островов.
...
Рейтинг: 0 / 0
25 сообщений из 421, страница 6 из 17
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]