Можно ли пройти через все операторы if в функции? - PullRequest
0 голосов
/ 06 октября 2018
def ShortestDistance(maps,i,j,short,k): #i,j-->current position.
    x=0
    y=0
    for a in range(0, len(maps)):
        for b in range(0, len(maps[0])):
            if maps[a][b] == 2:
                x = a
                y = b

    if (i==x) and (j==y):
        short=min(short,k)
        return short

    maps[i][j]=3

    if within(i+1,j) and possible(maps,i+1,j):
        return ShortestDistance(maps,i+1,j,short,k+1)

    if within(i, j+1) and possible(maps,i, j+1):
        return ShortestDistance(maps,i,j+1,short,k+1)

    if within(i-1,j) and possible(maps,i-1,j):
        return ShortestDistance(maps,i-1,j,short,k+1)

    if within(i,j-1) and possible(maps,i,j-1):
        return ShortestDistance(maps,i,j-1,short,k+1)

    maps[i][j]=0

result=ShortestDistance(maps,0,0,longest,0)
if result is None:
    answer=-1
else:
    answer=result

Я пытаюсь сделать так, чтобы функция прошла через все операторы if в функции независимо от того, был ли предыдущий оператор if истинным или нет.Например, я хочу, чтобы мой 3-й оператор if в моем коде также прошел, даже если 2-й был верным (в этом случае кажется, что компьютер не проходит 3-й).Моя конечная цель - найти минимальное значение k для ВСЕХ ВОЗМОЖНЫХ СЛУЧАЙ.Как я смогу сделать это возможным?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Будьте осторожны с return заявлениями.Как только функция встречает один, она выходит.Попробуйте что-то вроде этого:

def ShortestDistance(maps,i,j,short,k):
    #...
    distances = []
    if within(i+1,j) and possible(maps,i+1,j):
        distances.append(ShortestDistance(maps,i+1,j,short,k+1))

    if within(i, j+1) and possible(maps,i, j+1):
        distances.append(ShortestDistance(maps,i,j+1,short,k+1))

    if within(i-1,j) and possible(maps,i-1,j):
        distances.append(ShortestDistance(maps,i-1,j,short,k+1))

    if within(i,j-1) and possible(maps,i,j-1):
        distances.append(ShortestDistance(maps,i,j-1,short,k+1))

    return min(distances)
0 голосов
/ 06 октября 2018

Используйте это:

def ShortestDistance(maps,i,j,short,k): #i,j-->current position.
    x=0
    y=0
    for a in range(0, len(maps)):
        for b in range(0, len(maps[0])):
            if maps[a][b] == 2:
                x = a
                y = b

    if (i==x) and (j==y):
        short=min(short,k)
        return short

    maps[i][j]=3
    resx = []
    if within(i+1,j) and possible(maps,i+1,j):
        resx.append(ShortestDistance(maps,i+1,j,short,k+1))

    if within(i, j+1) and possible(maps,i, j+1):
        resx.append(ShortestDistance(maps,i,j+1,short,k+1))

    if within(i-1,j) and possible(maps,i-1,j):
        resx.append(ShortestDistance(maps,i-1,j,short,k+1))

    if within(i,j-1) and possible(maps,i,j-1):
        resx.append(ShortestDistance(maps,i,j-1,short,k+1))

    maps[i][j]=0
    return min(resx)

result=ShortestDistance(maps,0,0,longest,0)
if result is None:
    answer=-1
else:
    answer=result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...