题目描述
解题思路
从某一点出发,穷尽方案数,用dfs方法做。
传入dfs的数据应该是当前的坐标以及走了多少个点。
循环遍历所有结点让他们作为dfs的遍历头节点,每个点进入dfs后依次遍历上下左右因为蛇是连续,当然这两步要记得回溯。
具体看代码,代码注释得很详细。
代码
#初始化数据
maps=[[0]*4 for _ in range(4)]#初始地图,放了的地方置为一没放则为0
dirct={(1,0),(-1,0),(0,-1),(0,1)}#由于蛇的身体是连续的所以为周围4个格子
result=0
#dfs深度遍历寻找
def dfs(x,y,temp_cnt):
"""
:param x:进入遍历的横坐标
:param y:进入遍历的纵坐标
:param temp_cnt:当前遍历计数
:return:总的方法数
"""
global result
if temp_cnt==16:
result+=1
return
for dx,dy in dirct:
nx=x+dx
ny=y+dy
if 0<=nx<4 and 0<=ny<4 and maps[nx][ny]==0:
maps[nx][ny]=1
dfs(nx,ny,temp_cnt+1)
maps[nx][ny]=0#回溯进行下一个方向循环判断
maps[x][y]=0#回溯让下一个坐标当头结点
return
#循环遍历让每一个坐标当头结点进行深度遍历
for i in range(4):
for j in range(4):
maps[i][j]=1#头节点记录标记
dfs(i,j,1)
print(result)