2015-11-02 48 views
1

我想用右手方法使用python编写脚本来解决迷宫问题。我写下了下面的脚本来读入迷宫的文件,并将它放入numpy 2D数组中。现在,我想搜索数组的第一行并找到0。这个0是迷宫的起点。从这里我会应用我的迷宫算法来检查是否他们有1或0点的方块。在numpy数组的第一行中找到第一个0

Maze_matrix是包含我的迷宫的矩阵,我想找到第一个0的索引第一排。

#!/usr/bin/python 

import sys 
import numpy as np 
import itertools 

if len(sys.argv) == 3: 
     maze_file = sys.argv[1] 
     soln_file = sys.argv[2] 
     rows = [] 
     columns = [] 

     with open(maze_file) as maze_f: 
       for line in maze_f: 
         row, column = line.split() 
         row = int(row) 
         column = int(column) 
         rows.append(row) 
         columns.append(column) 
       maze_matrix = np.zeros((rows[0], columns[0])) 
       for line1, line2 in zip(rows[1:], columns[1:]): 
         maze_matrix[line1][line2] = 1 

     print maze_matrix 

else: 
     print('Usage:') 
     print(' python {} <maze file> <solution file>'.format(sys.argv[0])) 
     sys.exit() 
+0

如果您满意答案upvoting罚款,但解决您的问题的解决方案应标记为“*接受此答案*”。这不仅赞赏答案,而且向其他人发出信号*这个问题已经解决了*。 – daniel451

回答

1

我建议采取看看numpy.array方法argmin

>>> n = numpy.ones(100) 
>>> n[50] = 0 
>>> n.argmin() 
50 
1

我会建议使用numpy.where()。它具有非常好的性能,并且一次搜索整个数组(或子集)。如果一个元素的条件为真,它将返回一个包含该元素索引的数组。

In [1]: import numpy as np 

In [2]: a = np.random.randint(0, 9, (4,4)) 

In [8]: a 
Out[8]: 
array([[6, 5, 0, 3], 
     [4, 5, 8, 6], 
     [0, 3, 4, 4], 
     [6, 4, 6, 7]]) 

In [9]: np.where(a == 0) 
Out[9]: (array([0, 2]), array([2, 0])) # two 0's found 
             # first at a[0, 2] (row 0, column 2) 
             # second at a[2, 0] (row 2, column 0) 
相关问题