Путь в списке списков - PullRequest
       10

Путь в списке списков

0 голосов
/ 23 апреля 2019

Итак, моя проблема заключается в следующем: у меня есть этот список высот в горе, и я хочу создать функцию, которая может возвращать координаты (строку, столбец) высоты, которая должна быть достигнута при восхождении на север.Восхождение начинается с любой ячейки, кроме ячеек в строке 0, и заканчивается, когда ячейка выше имеет меньшее / равное значение, чем ячейка ниже.восхождение продолжается по прямой линии вверх.

Каждая ячейка представляет собой высоту.

altitude = [
   [206,205,204,190,208],
   [190,194,206,197,203], 
   [196,196,205,201,193],
   [194,199,199,206,205], 
   [192,196,195,201,193], 
   [194,199,200,200,205], 
   [196,196,195,200,193] ]

То, что я пытался получить, в итоге вернуло координаты ячейки выше той, которая должна была быть.Он должен возвращать координаты ячейки, которая имеет, так сказать, «меньшую» ячейку сверху.И значение NONE, когда оно должно возвращать координаты start


Start представляет пару координат в высотах.


Например, я должен получитьэти результаты, но я не:

climb_north(altitude, (1,0))
(0,0)

climb_north (altitude, 2,0))
(2,0)

climb_north (altitude, (4,0)
(2,0)

Это то, что я попробовал еще.

def climb_north(altitude, start):

    r = start[0]
    c = start[1]
    r_next = r - 1

    while (r_next >= 0):

       if (altitude[r][c]) > (altitude[r_next][c]):
           return (r_next, c)

       r, r_next = r_next, r-1

    return

Так что, если кто-нибудь может мне помочь, было бы здорово!Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Проблема в сути вашей функции:

   if (altitude[r][c]) > (altitude[r_next][c]):
       return (r_next, c)

Как только вы найдете более низкую высоту, вы возвращаете ряд этой более низкой высоты. Вернуть r вместо r_next. Кроме того, поскольку r_next - это всегда r-1, вам действительно нужно использовать дополнительную переменную? Для большинства из нас r-1 предпочтительнее, как в

   if (altitude[r][c]) > (altitude[r-1][c]):
       return (r, c)
0 голосов
/ 23 апреля 2019

Я предполагаю, что altitude следует тому же формату, что и test, а start означает координату (row, column), индексы которой начинаются с 0.

def climb_north(altitude, start):
    r0, c = start
    for r in range(r0, 0, -1):
        if altitude[r][c] > altitude[r-1][c]:
            if r == r0:
                return None
            else:
                return (r, c)

Используя ваш тестовый пример, он работает следующим образом:

climb_north(test, (5, 3)) # return (3,3)
climb_north(test, (3, 4)) # return None
climb_north(test, (1, 3)) # return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...