python回溯算法_Python 回溯算法

回溯算法(试探法)

在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

回溯算法解决问题的

针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。

确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。

以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

实例:

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,

每一次只能向左,右,上,下四个方向移动一格,

但是不能进入行坐标和列坐标的数位之和大于k的格子。

例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

class Solution:

def movingCount(self, threshold, rows, cols):

"产生 0 矩阵 "

board=[[0 for i in range(cols)] for j in range(rows)]

global acc

acc = 0

"下标之和,若大于threshold则TRUE,否则Folse"

def block(r,c):

s=sum(map(int,str(r)+str(c)))

return s>threshold

def traverse(r,c):

global acc

if not (0<=r

return

if board[r][c]!=0: # 不等于0 跳出

return

if board[r][c]==-1 or block(r,c):

board[r][c]=-1 #超出门限的点记录-1

return

board[r][c]=1 #符合规定的点记录1,并计数加一

acc+=1

traverse(r+1,c)

traverse(r-1,c)

traverse(r,c+1)

traverse(r,c-1)

traverse(0,0)

return acc

o = Solution()

print(o.movingCount(4 ,3 ,3))

# 输出结果:

9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值