我是XJOIde业余爱好者(不是学军的学生),现在在3级。
这是二级十三段的题
题面
时间限制:2s 空间限制:256M
描述
给定一个迷宫。在迷宫中有一些障碍物无法通过,请计算出从左上角到右下角的移动方案总数。(一个位置不能经过两次,只能上下左右四个方向走)
输入格式
第一行包含两个整数n,m,表示迷宫的大小。1 <= N,M<= 6
接下来的n行,每行包含m个字符,代表迷宫。
#代表障碍
*代表你可以去的位置
左上角和右下角用“*”表示
输出格式
一个整数。
样本输入1
5 6 *****# *###*# *###*# *###*# ******
样本输出1
2
样本输入2
6 6 ****** ****** ****** ****** ****** ******
示例输出2
1262816
提示
思路:
dfs,到底了method++,回溯,边界判断和访问和在一起了~还是挺简单的
代码:
def dfs(x,y):
global a
global method
global n,m
if
x==n-1 and y==m-1:
method+=1
return
if
y<m-1 and a[x][y+1]==
"*"
and v[x][y+1]==0:
v[x][y+1]=1
dfs(x,y+1)
v[x][y+1]=0
if
x<n-1 and a[x+1][y]==
"*"
and v[x+1][y]==0:
v[x+1][y]=1
dfs(x+1,y)
v[x+1][y]=0
if
y>0 and a[x][y-1]==
"*"
and v[x][y-1]==0:
v[x][y-1]=1
dfs(x,y-1)
v[x][y-1]=0
if
x>0 and a[x-1][y]==
"*"
and v[x-1][y]==0:
v[x-1][y]=1
dfs(x-1,y)
v[x-1][y]=0
return
n,m=map(
int
,input().split())
a=[]
v=[[0
for
i in range(m)]
for
i in range(n)]
method=0
for
i in range(n):
a.append(list(input()))
v[0][0]=1
dfs(0,0)
print(method)