I upload my test_maze.txt so you can see my problem. I have some 3 unwanted $ that went up and 1 unwanted $ that went down on my path on the maze from P to T. I think the problem is in line 20 in the def main(): of my maze.py I need help fixing that if loop.
"""
File: maze.py
"""
from grid import Grid
from stack import ArrayStack
def main():
maze = getMazeFromFile()
tempstack = ArrayStack()
print maze
(startRow, startCol) = findStartPos(maze)
success = getOut(startRow, startCol, maze)
if success != None:
print "Maze solved: "
(col,row) = success.pop()
tempstack.push((col,row))
(pcol,prow) = (col,row)
while not success.isEmpty():
(col,row) = success.pop()
if (pcol,prow):
tempstack.push((col,row))
maze[col][row] = "$"
print maze
print "Path: " + tempstack
else:
print "No path out of this maze"
def getMazeFromFile():
name = raw_input("Enter a file name for the maze: ")
fileObj = open("maze.txt", 'r')
firstLine = map(int, fileObj.readline().strip().split())
rows = firstLine[0]
columns = firstLine[1]
maze = Grid(rows, columns, "*")
for row in xrange(rows):
line = fileObj.readline().strip()
column = 0
for ch in line:
maze[row][column] = ch
column += 1
return maze
def findStartPos(maze):
for row in xrange(maze.getHeight()):
for column in xrange(maze.getWidth()):
if maze[row][column] == 'P':
return (row, column)
return (-1, -1)
def getOut(row, column, maze):
stack = ArrayStack()
stack.push((row, column))
while not stack.isEmpty():
(row, column) = stack.peek()
if maze[row][column] == 'T':
return stack
elif maze[row][column] != '.':
maze[row][column] = '.'
counter = 0
if row != 0 and not maze[row - 1][column] in ('*', '.'):
stack.push((row - 1, column))
counter += 1
if row + 1 != maze.getHeight() and not maze[row + 1][column] in ('*','.'):
stack.push((row + 1, column))
counter += 1
if column + 1 != maze.getWidth() and not maze[row][column + 1] in ('*','.'):
stack.push((row, column + 1))
counter += 1
if column != 0 and not maze[row][column - 1] in ('*','.'):
stack.push((row, column - 1))
counter += 1
if counter == 0:
stack.pop()
return None
main()
These are the other file's codes in order to run my maze.py
"""
File: stack.py
"""
import math
from arrays import Array
class ArrayStack(object):
"""Represents a stack using Array."""
def __init__(self):
self._items = Array(0, None)
self._top = -1
def __len__(self):
"""The number of items in the stack."""
return self._top + 1
def __str__(self):
"""The string representation of the stack."""
s = ""
for i in xrange(self._top + 1):
s += str(self._items[i]) + " "
return s
def isEmpty(self):
return self._top == -1
def peek(self):
"""Precondition: stack is not empty."""
return self._items[self._top]
def push(self,newindex):
"""Add new item to top of stack."""
self._top += 1
self._items[self._top] = newindex
def pop(self):
tmp = self._items[self._top]
self._top -= 1
return tmp
"""
File: arrays.py
"""
import math
class Array(object):
def __init__(self,capacity,fillValue = None):
self._items = list()
for count in xrange(capacity):
self._items.append(fillValue)
def __len__(self):
return len(self._items)
def __str__(self):
s = ""
for i in self._items:
s += "%1s" %(str(i))
return s
def __iter__(self):
return iter(self._items)
def __getitem__(self,index):
return self._items[index]
def __setitem__(self,index,newItem):
if(index == len(self._items)):
self._items.append(newItem)
else:
self._items[index] = newItem
"""
File: grid
"""
from arrays import Array
class Grid(Array):
def __init__(self, rows, columns, fillValue = None):
self._data = Array(rows)
for row in xrange(rows):
self._data[row] = Array(columns, fillValue)
def getHeight(self):
return len(self._data)
def getWidth(self):
return len(self._data[0])
def __getitem__(self, index):
return self._data[index]
def __str__(self):
result = ""
for row in xrange(self.getHeight()):
for col in xrange(self.getWidth()):
result += str(self._data[row][col]) + ""
result += "\n"
return result