For this python code:
def isSafe(maze, visited, x, y):
return 0 <= x < len(maze) and 0 <= y < len(maze[0]) and \
not (maze[x][y] == 0 or visited[x][y])
def find_4path(maze,i,j,dest,visited,a,f,count):
c=0
#new
if (i,j)==dest:
f.append(a)
f[-1]=[n for n in a]
for n in range(len(a)):
a.pop()
#old
#if (i,j)==dest:
#f.append(a)
#a=[]
#c+=1
#print(a,"\n",f,"\n",c)
#if c==count:
#return 1
visited[i][j]=True
if isSafe(maze,visited,i+1,j):
a.append((i+1,j))
print(a)
find_4path(maze,i+1,j,dest,visited,a,f,count)
if isSafe(maze,visited,i-1,j):
a.append((i-1,j))
print(a)
find_4path(maze,i-1,j,dest,visited,a,f,count)
if isSafe(maze,visited,i,j-1):
a.append((i,j-1))
print(a)
find_4path(maze,i,j-1,dest,visited,a,f,count)
if isSafe(maze,visited,i,j+1):
a.append((i,j+1))
print(a)
find_4path(maze,i,j+1,dest,visited,a,f,count)
visited[i][j]=False
if len(a)!=0:
a.pop()
def find(maze, src, dest):
# get source cell (i, j)
i, j = src
# get destination cell (x, y)
x, y = dest
# base case: invalid input
if not maze or not len(maze) or not maze[i][j] or not maze[x][y]:
return 0
# `N × N` matrix
N = len(maze)
# 2D matrix to keep track of cells involved in the current path
visited = [[False for x in range(N)] for y in range(N)]
a=[]
f=[]
count=6
# start from source cell (i, j)
return find_4path(maze, i, j, dest, visited,a,f,count)
if __name__ == '__main__':
maze=[[0,0,1,1,1],[1,1,1,0,1],[1,1,0,1,0],[1,1,0,1,1],[1,1,1,0,0]]
src=(3,0)
dest=(1,4)
print(find(maze, src, dest))
In def find_4path => if (i, j) = dest=> f.append(a) a=[]
, after matrix f
gets its first entry, the code stops working as it should.
After f.append(a)
, a
should become a null matrix, but it does not.
output of 1st and 2nd excution:
[(4, 0)]
[(4, 0), (4, 1)]
[(4, 0), (4, 1), (3, 1)]
...
...
...
[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (1, 2), (0, 2), (0, 3), (0, 4)]
[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (1, 2), (0, 2), (0, 3), (0, 4), (1, 4)]
[]
[[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (1, 2), (0, 2), (0, 3), (0, 4), (1, 4)]]
1
#here matrix `a` should be null matrix i.e. `a=[]`
[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (2, 0)]
[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (2, 0), (1, 0)]
[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (2, 0),(1,0),(1,1)]
...
...
...
[]
[[(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (2, 0), (1, 0), (1, 1), (1, 2), (0, 2), (0, 3), (0, 4), (1, 4)], [(4, 0), (4, 1), (3, 1), (2, 1), (1, 1), (2, 0), (1, 0), (1, 1), (1, 2), (0, 2), (0, 3), (0, 4), (1, 4)]]
#here value of `c` should be 2
1
Please point out what is wrong in this code