I'm trying to make a solution for the n queens problem and I want to make a code writing a number of possible solutions for a n X n board and n queens.
Here is my code:
n = int(input())
piony = [[False for i in range(n)] for j in range(n)]
skosy_lp = [[False for i in range(n)] for j in range(n)]
skosy_pl = [[False for i in range(n)] for j in range(n)]
figury = [-1] * n
counter = 0
layer = 0
#list creating etc. piony list is containing vertical lines occupied by queens, skosy_lp
#is containing lines oblique from left to right, skosy_pl - from right to left.
#this is a backtracking algorithm
#figury list is containing positions of queens. -1 means that the queen isn't placed
while True:
if layer == -1:
break
piony[layer] = piony[layer-1]
skosy_pl[layer] = skosy_pl[layer-1]
skosy_pl[layer].append(False)
skosy_pl[layer].pop(0)
skosy_lp[layer] = skosy_lp[layer-1]
skosy_lp[layer].insert(0, False)
skosy_lp[layer].pop(n)
figury[layer]+=1
while figury[layer] < n and (piony[layer][figury[layer]] or skosy_lp[layer][figury[layer]]or skosy_lp[layer][figury[layer]]):
figury[layer] +=1
if figury[layer] == n:
figury[layer] = -1
piony[layer] = [False] * n
skosy_pl[layer] = [False] * n
skosy_lp[layer] = [False] * n
layer-=1
else:
if layer == n-1:
counter+=1
layer-=1
else:
print(piony)
#I think there is a bug
piony[layer][figury[layer]] = True
skosy_pl[layer][figury[layer]] = True
skosy_lp[layer][figury[layer]] = True
layer+=1
When I stop a program in the middle, I discover that when I make piony[layer][figury[layer]] = True
for layer = 0 (and figury[layer] = 0
) the program is changing piony[0][0]
and piony[-1][0]
.
Can someone tell me why and how to fix it?
source https://stackoverflow.com/questions/76292028/strange-multidimensional-list-element-changing
Comments
Post a Comment