Реализация алгоритмов для массивов 2D
| English | Русский |
|---|---|
| nested-loop/ˈnestɪd luːp/ | вложенный цикл |
| main diagonal/meɪn daɪˈæɡənl/ | главная диагональ |
| indexed/ˈɪndekst/ | индексированный |
Алгоритмы сеток
- Двумерные (2-D) алгоритмы комбинируют шаблоны массивов с обходом через вложенные циклы.
- Сумма / подсчет / максимум по всей сетке: накапливайте внутри внутреннего цикла.
- Поиск в сетке: верните
[row][col], где найдено (или сигнал «не найдено»). - Та же логика накопления/максимума, но теперь по
rows × columnsячейкам.
Суммы строк и столбцов
- Одна строка: зафиксируйте
r, делайте цикл поcдля столбцов, суммируяg[r][c]. - Один столбец: зафиксируйте
c, делайте цикл поrдля строк, суммируяg[r][c]. - Выбор того, какой индекс зафиксировать, а по какому делать цикл, является ключевым решением.
- Сумма строки проходит горизонтально; сумма столбца проходит вертикально.
Диагональ
- Главная диагональ квадратной сетки — это ячейки, где строка == столбец.
- Цикл по одному индексу:
for (int i = 0; i < g.length; i++) { ... g[i][i] ... } g[0][0], g[1][1], g[2][2], …— одиночный цикл, оба индекса равны.- Полезно для квадратных сеток (проверки тождества, диагонали игровых досок).
Изменение ячеек
- Чтобы изменить ячейку, используйте индексированные вложенные циклы и присвойте
g[r][c] = .... - Версия for-each не может записать данные обратно в сетку.
- Следите за двумя границами — неправильная длина прочитает или запишет неверную ячейку.
- Тщательно отслеживайте
[r][c], особенно когда количество строк и столбцов различается.
Решите, какой индекс зафиксировать, а по какому делать цикл — это разница между суммой строки и суммой столбца. Сумма строки фиксирует r и делает цикл по c (g[r][c] по горизонтали); сумма столбца фиксирует c и делает цикл по r (g[r][c] по вертикали). А изменение ячеек требует индексированных вложенных циклов (g[r][c] = …); форма for-each может только читать.
Суммирование столбца 0 сетки:
int sum = 0;for (int r = 0; r < g.length; r++) { sum += g[r][0]; }- Фиксирует столбец
0, делает цикл по строкам вниз — это сумма столбца.
Двумерные (2-D) алгоритмы применяют шаблоны массивов поверх вложенных циклов: суммирование/подсчёт/максимум/поиск по всей сетке, сумма по строке (закрепить r, цикл по c), сумма по столбцу (закрепить c, цикл по r) или диагональ (g[i][i]). Изменение ячеек требует индексированных циклов (g[r][c] = …); учитывайте оба предела (g.length строк, g[0].length столбцов).
Подсчет суммы столбца 0
g[0][0]=1, g[1][0]=4, g[2][0]=7: накопленная сумма 1, 5, 12.
Чтобы сложить ОДНУ строку r, вы...
Сумма строки фиксирует строку и проходит по столбцам.
Чтобы сложить ОДНУ колонку c, вы...
Сумма колонки фиксирует колонку и проходит по строкам.
Главная диагональ квадратной сетки — это ячейки, где...
g[0][0], g[1][1], g[2][2] — один индекс, оба равны.
Формат for-each может изменять (записывать в) ячейки сетки.
For-each предназначен только для чтения; используйте циклы с индексами (g[r][c] = ...) для записи.
Столбец 0 {{1,2},{4,5},{7,8}} равен 1, 4, 7. Какова их сумма?
1 + 4 + 7 = 12.
Расставьте шаги для суммирования столбца c.
Инициализация, проход по строкам, накопление, возврат результата.