链接到Qns:https://open.kattis.com/problems/10kindsofpeople
我不确定提交给Kattis的最后三个测试用例为何会出现运行时错误?可能是由于递归堆栈溢出问题?
Screenshot of error on Kattis Website
我还有另一个问题:这种问题是否可以通过迭代解决?我真的想不出我该怎么做。我想到可能要使用堆栈?但不确定是否会变得太复杂。
#function to check if destination can be reached
def check(startX, startY, endX, endY, visitedArr,
mapArr, user, r, c):
#Base case when edge of map is reached
if( (startX==-1) or (startY==-1)
or (startX == r) or (startY == c) ):
return -1
#Base case when destination is reached
if((startX == endX) and (startY == endY) ):
if(mapArr[startX][startY] == user):
return user #either 0 or 1
else:
return -1
#Base case when invalid path
if(mapArr[startX][startY] != user):
return -1
#Base case when return back to prev position
if(visitedArr[startX][startY] == 1):
return -1
#Recursive cases: Check Up, Down, Left, Right
visitedArr[startX][startY] = 1
up = check(startX-1, startY, endX,
endY, visitedArr, mapArr, user, r, c)
down = check(startX+1, startY, endX,
endY, visitedArr, mapArr, user, r, c)
left = check(startX, startY-1, endX,
endY, visitedArr, mapArr, user, r, c)
right = check(startX, startY+1, endX,
endY, visitedArr, mapArr,user, r, c)
#Check return values
if ( (up==-1) and (down==-1) and (left==-1) and (right==-1) ):
return -1
else:
return user
#Main function
input1 = input().split()
r = int(input1[0])
c = int(input1[1])
mapArr = [[0 for x in range(c)] for y in range(r)]
for i in range(0,r):
p = input()
j=0
for ch in p:
mapArr[i][j]=int(ch)
j+=1
lines = int(input())
for i in range(0,lines):
visitedArr = [[0 for x in range(c)] for y in range(r)]
input2 = input().split()
startX = int(input2[0])
startY = int(input2[1])
endX = int(input2[2])
endY = int(input2[3])
#Indices start from 0
returnValue = check(startX-1,
startY-1,endX-1,endY-1, visitedArr, mapArr,
mapArr[startX-1][startY-1], r, c)
if(returnValue == 1):
print("decimal")
elif(returnValue == 0):
print("binary")
else:
print("neither")