首页 > 解决方案 > 为什么当我初始化 path="" 并且不使用任何值初始化 path 时两个元素中的输出相同

问题描述

row = [ -1, 0, 1,  0]
col = [  0, 1, 0, -1]

def isSafe(x, y, processed):
    return (0 <= x < M) and (0 <= y < N) and not processed[x][y]

def dfs(board, words, processed, i, j, path=""):
    processed[i][j] = True

    path = path + board[i][j]
    words.append(path)
    for k in range(4):
        if isSafe(i + row[k], j + col[k], processed):
            dfs(board, words, processed, i + row[k], j + col[k], path="")
    processed[i][j] = False

def solve(board):
    processed = [[False for x in range(N)] for y in range(M)]
    words = []
    for i in range(M):
        for j in range(N):
            dfs(board, words, processed, i, j)
    print(words)
board =[
    ['A', 'B'],
    ['C', 'D']]
(M, N) = (len(board), len(board[0]))
solve(board)

输出是

['A', 'AB', 'ABD', 'ABDC', 'AC', 'ACD', 'ACDB', 'B', 'BD', 'BDC', 'BDCA', 'BA', 'BAC', 'BACD', 'C', 'CA', 'CAB', ' CABD', 'CD', 'CDB', 'CDBA', 'D', 'DB', 'DBA', 'DBAC', 'DC', 'DCA', 'DCAB']

我对 dfs 函数感到困惑,因为每次我用空字符串初始化路径时,输出列表的第二个元素应该是B但它是AB,就像这个第三个元素应该是C但在输出列表中它是ABC 等等。请解释这个递归

标签: pythondepth-first-search

解决方案


推荐阅读