我有一个当前列表,其中包含从起点和终点开始的路径点 这是来自3x3矩阵,起始位置为2,2,结束位置为0,0
网格也有位置不可遍历的单元格: 0,1 0,2 1,1
所以网格看起来像这样:
-----------------
|Goal| Wall| Wall |
==================
| |Wall | |
===================
| | | Start|
===================
运行算法以获得最佳路径后,我能够获得从2,2到0的可能方法
PathCaptured: ['2,2,1,2,2.0', '2,2,2,1,2.0', '2,1,1,0,5.0', '2,1,2,0,4.0', '1,0,0,0,7.0']
所以结构表示为:[startposx,startposy,destx,desty,score]
我希望反过来使用路径来重建点。
我遇到的问题是我正在创建2个for循环来遍历列表,以确保我连接两个点以得出答案
[[2,2][2,1][1,0][0,0]]
在python中有更简单的方法吗?
使用当前代码更新:
first_time=True
for i, e in reversed(list(enumerate(self.action_list))):
if debug:
print i, e
if first_time:
startx,starty,destx,desty,_ = e.split(",")
ctr += 1
box_path[ctr] = [destx, desty]
ctr += 1
box_path[ctr] = [startx,starty]
#box_path.append([destx,desty])
#box_path.append([startx,starty])
first_time = False
else:
for j in range(len(self.action_list)):
dx, dy, dx_1, dy_1,_= self.action_list[j].split(",")
Dx,Dy = box_path[ctr]
if (Dx == dx_1 and Dy == dy_1):
box_path[ctr+1] = [dx,dy]
ctr += 1
#box_path.append([dx,dy])
break
if debug:
print box_path
答案 0 :(得分:0)
看起来你的返回值是在最终单元格到达某个C1的目标的意义上排序的,然后你有一堆从C2到所有相邻单元格的单元格(一个是C1,其余的不相关),依此类推。所以当你找到一个连接到你的单元格时就会向后退,你可以保证你在路上(似乎你只是再次迭代,这是浪费):
def getStep(stepStr):
step = map(int,stepStr.split(','))
return (step[0],step[1]),(step[2],step[3]) #Can return score if you need
goal = (2,2) #Your example
pos = len(self.action_list)-1
start,stop = getStep(self.action_list[pos])
res = [stop]
while start != goal:
pos -= 1
nstart,nstop = getStep(self.action_list[pos])
while nstop != start:
pos -= 1
nstart,nstop = getStep(self.action_list[pos])
res.append(start)
start = nstart
res.append(goal)
这将从头到尾遍历列表一次。内环跳过不相关的不连接到下一个单元的单元。我在这里完全忽略了错误检查,比如路径是坏的(例如永远nstop!=start
)。