惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
D
DataBreaches.Net
D
Docker
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Martin Fowler
Martin Fowler
U
Unit 42
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Vercel News
Vercel News
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog

博客园 - StudyNLP

python把中文汉字转拼音,存储到excel表格 算法结束篇 贪心-钓鱼问题 贪心-放置雷达 贪心-Stall Reservations 贪心-电影节 贪心-圣诞老人的礼物 广度优先搜索-八数码问题 广度优先搜索-鸣人和佐助 广度优先搜索-迷宫问题 广度优先搜索-抓住那头牛 深度优先搜索-生日蛋糕 深度优先搜索-Roads 深度优先搜索-城堡问题 动态规划-分蛋糕V2 动态规划-分蛋糕V1 动态规划-滑雪 动态规划-0-1背包问题 动态规划-神奇的口袋V2
深度优先搜索-踩方格
StudyNLP · 2020-07-05 · via 博客园 - StudyNLP
踩方格:有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a.每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b. 走过的格子立即塌陷无法再走第二次;
c. 只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步(n<=20),共有多少种不同的方案。
2种走法只要有一步不一样,即被认为是不同的方案。

思路:递归
因为假设是无穷大的平面,最多走20步,也就是起点是平面中的任意一个点
初始化visited[30][50]长度的二维列表,假设从visited[25][25],
往3个方向走20步都不会越界,可以满足题目要求
从 (i,j) 出发,走n步的方案数,等于以下三项之和:
向北走,从(i-1,j)出发,走n-1步的方案数。前提: (i+1,j)还没走过
向东走,从(i,j+1)出发,走n-1步的方案数。前提: (i,j+1)还没走过
向西走,从(i,j-1)出发,走n-1步的方案数。前提: (i,j-1)还没走过

python代码实现:

 1 # 记录该方格是否走过,0-未走过;1-走过
 2 visited = []
 3 
 4 def Ways(i, j, n):
 5     global visited
 6     if n == 0:
 7         return 1
 8     visited[i][j] = 1
 9     num = 0
10     # 向北走
11     if visited[i-1][j] == 0:
12         num += Ways(i-1, j, n-1)
13     # 向东走
14     if visited[i][j+1] == 0:
15         num += Ways(i, j+1, n-1)
16     # 向西走
17     if visited[i][j-1] == 0:
18         num += Ways(i, j-1, n-1)
19     visited[i][j] = 0
20     return num
21 
22 
23 def main():
24     # n-步数
25     n = int(input())
26     global visited
27     # 30行,50列
28     visited = [[0] * 50 for i in range(30)]
29 
30     steps = Ways(25, 25, n)
31     print("走%d步,共有%d种不同的方案" % (n, steps))
32 
33 
34 if __name__ == '__main__':
35     main()