10种人(Kattis上最后3个测试用例的运行时错误)

时间:2019-06-16 07:44:12

标签: python-3.x

链接到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")

0 个答案:

没有答案