2017-03-09 2 views
0

한 위치에서 다른 위치로 그리드의 최단 경로를 찾는 프로그램이 있습니다.가능한 모든 명령문을 실행할 수있는 방법이 있습니까?

반환되는 최단 경로는 배열에서 함수가 먼저 호출하는 방향에 달려 있다고 생각합니다.

North, South, East, West의 각 주문에 한 번만 제외하고 동일한 기능을 실행하는 방법이 있습니까?

나는 4 개를 가질 수 있음을 이해합니다! 비슷한 기능을하지만, 나는 그것을 할 수있는 더 깨끗한 방법이 있는지 궁금하네요.

미리 알려지지 않은 부분에 대해 사과드립니다. 특별히 경험하지는 않습니다!

def find_path(world, path, robotx, roboty, goalx, goaly, size): 
print("Robot at: ", robotx, ",", roboty) 
#print(path) 
time.sleep(0.7) 
if [robotx, roboty] == [goalx, goaly]: 
    path_count = 0 
    print("Woohoo! Goal found at ", goalx, ',', goaly, '. ', "Steps taken: ", path_count) 
    print(path) 
    return path 
else: 
    #South 
    if robotx != size and world[robotx + 1][roboty] in (0, 2): 
     world[robotx + 1][roboty] = 3 
     path.add_head(Node([robotx + 1, roboty])) 
     find_path(world, path, robotx + 1, roboty, goalx, goaly, size) 

    #East 
    if roboty != size and world[robotx][roboty + 1] in (0, 2): 
     world[robotx][roboty + 1] = 3 
     path.add_head(Node([robotx, roboty + 1])) 
     find_path(world, path, robotx, roboty + 1, goalx, goaly, size) 

    #North 
    if robotx != 0 and world[robotx - 1][roboty] in (0, 2): 
     world[robotx - 1][roboty] = 3 
     path.add_head(Node([robotx - 1, roboty])) 
     find_path(world, path, robotx - 1, roboty, goalx, goaly, size) 

    #West 
    if roboty != 0 and world[robotx][roboty - 1] in (0, 2): 
     world[robotx][roboty - 1] = 3 
     path.add_head(Node([robotx, roboty - 1])) 
     find_path(world, path, robotx, roboty - 1, goalx, goaly, size) 

답변

0

다른 사람이 당신에게 정확한 구문을주고 더 나은 될 수 있도록 내 파이썬은 약간 녹슨이지만, 원칙적으로, 당신은 다음과 같습니다 함수 만들어야합니다 다음

def checkDir(chkX, chkY): 
    ... 
return 

을 -1과 +1 값을 chkX, chkY로 바꿉니다.

그런 다음 당신은 다음과 같은 기능을 보이는 4 번 호출 :

checkDir(1, 1) 
checkDir(-1, 1) 
checkDir(1, -1) 
checkDir(-1, -1) 
+0

을 나는 그것이'checkDir을 (1,0)','checkDir (-1,0)','checkDir (해야한다고 생각 0,1)'과'checkDir (0, -1)'을 사용한다. 또한, 모든 순열을 찾아서 선택하려면'list (itertools.permutation ([(1,0), (-1,0), (0,1), (0, -1)]))'을 고려하십시오. –

관련 문제