2017-03-09 8 views
0

私はある位置から他の位置にグリッド内の最短経路を探しているプログラムを持っています。可能なすべての命令を実行する方法はありますか?

返される最短パスは、配列のどの方向から最初に呼び出されるかによって異なります。

North、South、East、Westの可能な注文ごとに1回を除いて、同じ機能を実行する方法はありますか?

私は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

他の誰かがあなたに正確な構文を与えることで良いかもしれないので、私のPythonのは、少し錆びですが、原則的に、あなたはこのように見える機能を作成する必要があります。その後、

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

をそれらの-1と+1の値を必要に応じてchkX、chkYに置き換えます。

その後、あなたはこのようになります。その関数を4回呼び出す:

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

私は 'checkDir(、それは' 'checkDir(-1,0)、' 'checkDir(1,0)であるべきだと思います0,1) 'と' checkDir(0、-1) 'を返します。また、すべての順列から見つけて選択するには 'list(itertools.permutation([(1,0)、(-1,0)、(0,1)、(0、-1)]))'を考えてください。 –

関連する問題