I am trying to do a BFS while Python gives me an int object not iterable error.
Part of the code is
visited, queue = set(), collections.deque( ((0, 0), [ (0, 0) ] ) )
# tuple: current location, path
while queue:
vertex = queue.popleft()
i,j=vertex[0]
if i+1<=dim-1 and (i+1, j) not in visited and X[i+1, j]==0:
visited.add(( i+1, j) )
temp=( (i+1, j), vertex[1]+[(i+1, j)])
if temp[0]==(dim-1, dim-1):
return True, temp[1]
queue.append(temp)
Under the while loop, I am doing any other iteration at all!
解决方案
i, j = implies that is iterable and has exactly two elements. Whereas in your case, the expression (vertex[0]) yields an integer, which is not iterable.
The statement: i, j = vertex[0] is roughly equivalent to:
iterator = iter(vertex[0])
i = next(iterator) # this is iteration, but outside of a loop
j = next(iterator)
try:
next(iterator)
except StopIteration:
pass
else:
raise ValueError
Your code should either be
i = vertex[0]
j = vertex[1]
or
i, j = vertex