美文网首页
走迷宫回溯法

走迷宫回溯法

作者: yuriy0_0 | 来源:发表于2019-01-08 10:31 被阅读0次
捕获.PNG

感觉这个题应该很简单的,但是我没做出来!,真的菜

笔试没做出来的写法!

#测试数据
#2,2 0,0 2,2 3 0,1 0,2 1,1
steps=[]
g=[]
g_col,g_row=0,0
end_pos=[]

def trace(x,y):
    global g,g_col,g_row,steps,end_pos
    if x==end_pos[0] and y==end_pos[1]:
        steps.append([x,y])
        print(steps)
        return
    else:
        if g[x][y]==0:
            steps.append([x,y])
            print(steps)
            g[x][y]=1
            if x!=0:
                print('up')
                trace(x-1,y)
            elif x!=g_row:
                print('down')
                trace(x+1,y)
            elif y!=0:
                print('left')
                trace(x,y-1)
            elif y!=g_col:
                print('right')
                trace(x,y+1)
            else:
                print('no way out')
            
    
s=input().split()
graph,start,end=s[0].split(','),s[1].split(','),s[2].split(',')
x_num=int(s[3])
x_points=[]
for i in range(x_num):
    x_point=[0]*2
    x_str=s[4+i].split(',')
    x_point[0]=int(x_str[0])
    x_point[1]=int(x_str[1])
    x_points.append(x_point)
g_row,g_col=int(graph[0]),int(graph[1])
start_pos=int(start[0]),int(start[1])
end_pos=int(end[0]),int(end[1])
g=[[0]*(g_col+1) for i in range(g_row+1)]

for x_point in x_points:
    g[x_point[0]][x_point[1]]=1
print(g)
trace(start_pos[0],start_pos[1])

笔试后想出来的写法

steps=[]
g=[]
g_col,g_row=0,0
end_pos=[]
nextstep=[[-1,0],[1,0],[0,-1],[0,1]]
def trace(x,y):
    global g,g_col,g_row,steps,end_pos
    if x==end_pos[0] and y==end_pos[1]:
        steps.append([x,y])
        print(steps)
        return
    else:
        for i in range(4):
            tx,ty=(x+nextstep[i][0]),(y+nextstep[i][1])
            if tx<0 or tx>g_row or ty<0 or ty>g_col or g[tx][ty]==1:
                continue
            else:
                steps.append([tx,ty])
                #print(steps)
                g[tx][ty]=1
                trace(tx,ty)
                steps.pop()
                g[tx][ty]=0

s=input().split()
graph,start,end=s[0].split(','),s[1].split(','),s[2].split(',')
x_num=int(s[3])
x_points=[]
for i in range(x_num):
    x_point=[0]*2
    x_str=s[4+i].split(',')
    x_point[0]=int(x_str[0])
    x_point[1]=int(x_str[1])
    x_points.append(x_point)
g_row,g_col=int(graph[0]),int(graph[1])
start_pos=int(start[0]),int(start[1])
end_pos=int(end[0]),int(end[1])
g=[[0]*(g_col+1) for i in range(g_row+1)]

for x_point in x_points:
    g[x_point[0]][x_point[1]]=1
g[start_pos[0]][start_pos[1]]=1
steps.append([0,0])
trace(start_pos[0],start_pos[1])

1,为什么上面那种不行?
确实进行了遍历,但是一旦踩到障碍物就结束了(if g[x][y]==1)直接让遍历不走下面的路了
相当于对当前进行了约束,但是没有对下一步是否会走障碍物进行约束,一旦走入障碍物,就无法再进入遍历流程
2,为什么下面行?
回溯法有点像深度优先遍历,但是没有搜索完所有的可能性
1 第一个if是整体的返回条件,是遍历到第一个可能结果就返回
2 for循环代表对四个分支的遍历
3 第二个if代表当前遍历的分支已经不满足基本要求的条件限制时,进行剪枝,跳过当前分支
3,总结
回溯法就要对下一步进行试错判断,判断下一步能不能走,不能走剪枝,走能走的路

相关文章

  • 走迷宫回溯法

    感觉这个题应该很简单的,但是我没做出来!,真的菜 笔试没做出来的写法! 笔试后想出来的写法 1,为什么上面那种不行...

  • 回溯法以及迷宫问题

    概念 什么是回溯法? 回溯法的基本思想:对一个包括有很多结点,每一个结点有若干个搜索分支的问题,把原问题分解为对若...

  • c语言回溯法迷宫问题

    1.题目描述 定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int ...

  • 走迷宫算法(C回溯递归)

    引言 迷宫算法在很多场景都非常实用,比如游戏中的机器人等。而且高级的迷宫算法与回溯、递归也是息息相关的。而且回溯的...

  • 回溯算法

    一、概念 回溯法有通用解法的美称,对于很多问题,如迷宫等都有很好的效果。回溯算法实际上一个深度优先搜索尝试过程,主...

  • 回溯

    回溯算法 1.回溯法的简介 回溯法就是在尝试穷举搜素的同时,当发现某一步走不通时,可以回退到前一步,继续寻找问题的...

  • N皇后

    回溯法核心代码: n皇后问题回溯法

  • 回溯迷宫问题

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然...

  • backtrack算法

    概念和基本思想 走不通就退回再走的技术成为回溯法,满足回溯条件的某个状态点成为回溯点。在包含问题的所有解的解空间树...

  • 简单的谈谈dfs

    简单的说回溯法,递归就是将函数负责几遍。那么回溯法就是将for循环复制几遍。回溯法框架 为什么要把list的最后一...

网友评论

      本文标题:走迷宫回溯法

      本文链接:https://www.haomeiwen.com/subject/xvwdrqtx.html