현재 DFS에서 공부하고 있으며 다음과 같은 코드를 만들었습니다.
>>> N = 4
>>> check_list = [False]*N
>>> output = []
>>> possible_combs = []
>>> A = [1,2,3,4]
>>> def dfs(depth, N, A):
if depth == N:
possible_combs.append(output)
return
for i in range(N):
if check_list[i]:
continue
check_list[i] = True
output.append(A[i])
dfs(depth+1, N, A)
output.pop()
check_list[i] = False
이것은 코드이며 다음을 수행하면 possible_combs
빈 목록 이 반환됩니다.
>>> dfs(0, N, A) # N and A defined above
>>> possible_combs
[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
출력에 문제가 있다고 생각했기 때문에 첫 번째 코드를 depth==N
추가 하여 출력을 인쇄 해 보았습니다 print(output)
.
>>> def dfs(depth, N, A):
if depth == N:
possible_combs.append(output)
print(output)
return
for i in range(N):
if check_list[i]:
continue
check_list[i] = True
output.append(A[i])
dfs(depth+1, N, A)
output.pop()
check_list[i] = False
>>> dfs(0, N, A)
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 2, 3]
[1, 4, 3, 2]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 1, 3]
[2, 4, 3, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 1, 3, 2]
[4, 2, 1, 3]
[4, 2, 3, 1]
[4, 3, 1, 2]
[4, 3, 2, 1]
잘 인쇄됩니다. 그러나이 possible_combs
빈 목록 값을 반환하는 이유를 찾을 수 없습니다 . 아무도 이것에 나를 도울 수 있습니까 ??
시도하십시오 :
더하다 import copy
줄 변경 possible_combs.append(copy.copy(output))
Python은 목록을 참조로 전달하므로 possible_combs에 추가하기 전에 현재 버전의 출력을 복사해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다