0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94

Найти путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной

17.09.2023, 15:04. Показов 1335. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
(Время: 1 сек. Память: 16 Мб Сложность: 38%)
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной; из любой клетки ходить можно только вниз или вправо.

Входные данные
В первой строке входного файла INPUT.TXT находится число N. В следующих N строках содержатся по N цифр без пробелов. (2 ≤ N ≤ 250)

Выходные данные
В выходной файл OUTPUT.TXT выведите N строк по N символов. Символ «#» (решетка) показывает, что маршрут проходит через эту клетку, а «.» (точка) - что не проходит. Если путей с минимальной суммой цифр несколько, можно вывести любой.

Пример
№ INPUT.TXT OUTPUT.TXT
1 3
943
216
091 #..
###
..#
Помогите решить
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2023, 15:04
Ответы с готовыми решениями:

Найти путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы...

Найти путь из клетки (1, 1) в клетку (N, M) такой, чтобы сумма элементов, через которые он пролегает, была минимальной
В матрице NxM элементы являются цифрами от 0 до 9. Перемещаясь по элементам только вниз или вправо, найти путь из клетки (1, 1) в клетку...

Найти такой путь из клетки [i1, j1] в клетку [i2, j2], чтобы сумма чисел по данному пути была минимальной
Здравствуйте, есть такая задача: 1.Дан двумерный числовой массив размером N1xN2. 2.Найти такой путь из клетки в клетку , чтобы...

9
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.09.2023, 15:15
mikhailchess, чем помочь? что такое динамическое программирование знаешь?
1
0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94
17.09.2023, 15:20  [ТС]
немного представляю, ну я пытался решать при помощи сохранения чисел в список,потом иду наоборот, от конечного к первоначальному, но у меня проблема че делать с числами, в которых мы можем пойти только вверх или только влево, у меня на них прога ломается

Добавлено через 22 секунды
Цитата Сообщение от eaa Посмотреть сообщение
mikhailchess, чем помочь? что такое динамическое программирование знаешь?
немного представляю, ну я пытался решать при помощи сохранения чисел в список,потом иду наоборот, от конечного к первоначальному, но у меня проблема че делать с числами, в которых мы можем пойти только вверх или только влево, у меня на них прога ломается
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.09.2023, 15:34
mikhailchess, ну давай посмотрим твою прогу.
0
0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94
17.09.2023, 16:18  [ТС]
Цитата Сообщение от eaa Посмотреть сообщение
mikhailchess, ну давай посмотрим твою прогу.
Python
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
n = int(input())
list_n = []
final_k = 0
for i in range(n):
    k = input().split()
    for j in k:
        for kl in j:
            list_n.append(kl)
list_k = list(map(int, reversed(list_n)))
list_k[0] = 20
first = int(list_k[1])
second = int(list_k[1 + n])
final_number = min(first, second)
if final_number == list_k[1]:
    list_k[1] = 20
else:
    list_k[n] = 20
list_k[-1] = 20
print(list_k)
for y in range(1, n ** 2):
    if list_k[y] == 20:
        f_min = min(list_k[y + 1], list_k[y + n])
        if f_min == list_k[y + 1]:
            list_k[y + 1] = 20
        else:
            list_k[y + n] = 20
вот не могу приудмать че делать если нельзя двигаться влево или вверх
0
0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94
17.09.2023, 18:06  [ТС]
(Время: 1 сек. Память: 16 Мб Сложность: 38%)
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной; из любой клетки ходить можно только вниз или вправо.

Входные данные
В первой строке входного файла INPUT.TXT находится число N. В следующих N строках содержатся по N цифр без пробелов. (2 ≤ N ≤ 250)

Выходные данные
В выходной файл OUTPUT.TXT выведите N строк по N символов. Символ «#» (решетка) показывает, что маршрут проходит через эту клетку, а «.» (точка) - что не проходит. Если путей с минимальной суммой цифр несколько, можно вывести любой.

Пример
№ INPUT.TXT OUTPUT.TXT
1 3
943
216
091 #..
###
..#

Я написал решение:
Python
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
import math
 
n = int(input())
fn_k = n ** 2 - n
fn_list = [klx for klx in range(1, n ** 2)]
fn_last = fn_list[fn_k:]
list_n = []
final_k = 0
for i in range(n):
    k = input().split()
    for j in k:
        for kl in j:
            list_n.append(kl)
list_n.append(0)
list_k = list(map(int, reversed(list_n)))
list_k[1] = 20
first = int(list_k[2])
second = int(list_k[1 + n])
final_number = min(first, second)
if final_number == list_k[2]:
    list_k[2] = 20
else:
    list_k[1 + n] = 20
list_k[-1] = 20
for y in range(2, n ** 2):
    if list_k[y] == 20 and y % n != 0 and y not in fn_last:
        f_min = min(list_k[y + 1], list_k[y + n])
        if f_min == list_k[y + 1]:
            list_k[y + 1] = 20
        else:
            list_k[y + n] = 20
    if list_k[y] == 20 and y % n == 0:
        list_k[y + n] = 20
    if list_k[y] == 20 and y in fn_last:
        list_k[y + 1] = 20
finallist_k = list(map(int, reversed(list_k[1:])))
for final in range(0, len(finallist_k)):
    if finallist_k[final] == 20:
        finallist_k[final] = '#'
    else:
        finallist_k[final] = '.'
fork = ''.join(finallist_k)
 
def func_chunks_num(lst, c_num):
    n = math.ceil(len(lst) / c_num)
    for x in range(0, len(lst), n):
        e_c = lst[x : n + x]
        if len(e_c) < n:
            e_c = e_c + [None for y in range(n - len(e_c))]
        yield e_c
fol = list(func_chunks_num(fork, n))
print(*fol, sep='\n')
но на 7 тесте WrongAnswer, кто может, подскажите пожалуйста в чем ошибка или скиньте тест, который проходит неверно
0
3750 / 1944 / 613
Регистрация: 21.11.2021
Сообщений: 3,706
17.09.2023, 18:24
Лучший ответ Сообщение было отмечено mikhailchess как решение

Решение

Python
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
from math import inf
n = int(input('n = '))
matr = []
for i in range(n):
    matr.append(list(map(int, input(f'строка {i+1}: '))))
sum_dig = matr.copy()
for i in range(n):
    for j in range(n):
        if not i and not j:
            continue
        ii = sum_dig[i-1][j] if i else inf
        jj = sum_dig[i][j-1] if j else inf
        sum_dig[i][j] += min(ii,jj)
res = [['.']*n for i in range(n)]
i = n-1
j = n-1
while True:
    res[i][j] = '#'
    if not i and not j:
        break
    if not j or (comp := sum_dig[i-1][j] < sum_dig[i][j-1]):
        i -= 1
    elif not i or not comp:
        j -= 1
print(*[''.join(x) for x in res], sep='\n')
0
0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94
18.09.2023, 15:31  [ТС]
Цитата Сообщение от idealist Посмотреть сообщение
if not i and not j:
            continue
        ii = sum_dig[i-1][j] if i else inf
        jj = sum_dig[i][j-1] if j else inf
        sum_dig[i][j] += min(ii,jj)
res = [['.']*n for i in range(n)]
i = n-1
j = n-1
while True:
    res[i][j] = '#'
    if not i and not j:
        break
    if not j or (comp := sum_dig[i-1][j] < sum_dig[i][j-1]):
        i -= 1
    elif not i or not comp:
        j -= 1
print(*[''.join(x) for x in res], sep='\n')
привет, можешь объяснить вот эту часть кода?
0
3750 / 1944 / 613
Регистрация: 21.11.2021
Сообщений: 3,706
18.09.2023, 15:57
Цитата Сообщение от mikhailchess Посмотреть сообщение
привет, можешь объяснить вот эту часть кода?
Вот, с комментариями:
Python
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
from math import inf
n = int(input('n = '))
matr = []
for i in range(n):
    matr.append(list(map(int, input(f'строка {i+1}: '))))
sum_dig = matr.copy()
 
 
for i in range(n):                          # Пробегаемся по матрице сумм.
    for j in range(n):
        if not i and not j:                 # Если это начальная клетка, то пропускаем ее.
            continue
        ii = sum_dig[i-1][j] if i else inf  # ii присваиваем значение верхней клетки, а если ее нет - бесконечность
        jj = sum_dig[i][j-1] if j else inf  # jj присваиваем значение левой клетки, а если ее нет - бесконечность
        sum_dig[i][j] += min(ii,jj)         # К клетке ij добавляем меньшее значение из левой и верхней клеток
res = [['.']*n for i in range(n)]           # Создаем матрицу маршрута и заполняем точками.
i = n-1                                     # Начинаем ее обходить с последней клетки.
j = n-1
while True:
    res[i][j] = '#'                         # Отмечаем маршрут в матрице маршрута.
    if not i and not j:                     # Дошли до первой клетки - выходим.
        break
    if not j or (comp := sum_dig[i-1][j] < sum_dig[i][j-1]):    # Если клетка сумм самая левая,
                                                                # или верхняя от нее клетка с меньшей суммой,
                                                                # то идем вверх.
        i -= 1
    elif not i or not comp:                                     # Если клетка сумм самая верхняя,
                                                                # или левая от нее клетка с меньшей суммой,
        j -= 1                                                  # то идем влево.
print(*[''.join(x) for x in res], sep='\n')                     # Распечатываем матрицу маршрута.
1
0 / 0 / 0
Регистрация: 11.05.2023
Сообщений: 94
18.09.2023, 16:09  [ТС]
Цитата Сообщение от idealist Посмотреть сообщение
Вот, с комментариями:
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2023, 16:09
Помогаю со студенческими работами здесь

Найти такой путь из клетки A в клетку B, чтобы сумма чисел в них была равна заданному значению
Дано шахматную доску размером М на N. Шахматная фигура &quot;мини-тура&quot; может перемещаться только на одну клетку влево, вправо, вверх и вниз....

Найти такой путь из клетки (1,1) в клетку (А, В), чтобы сумма чисел равнялась заданному числу К
Помогите написать программу к задаче Дано шахматную доску размером М на N. Шахматная фигура &quot;мини-тура&quot; может перемещаться...

В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы...

Кузнечик прыгает из клетки 1 в клетку n , длина прыжка может быть от 1 до 3. У каждой клетки есть стоимость. Найти путь
Кузнечик прыгает из клетки 1 в клетку n , длина прыжка может быть от 1 до 3. У каждой клетки есть стоимость. Найти путь с максимальной...

Провести ходом коня через не вырезанные клетки путь минимальной длины из одной заданной клетки шахматной доски в другую
Дана шахматная доска, состоящая из NхN клеток; несколько из них вырезано. Провести ходом коня через не вырезанные клетки путь минимальной...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru