기본적인 프로그래밍 파이썬 : 파이썬 기반 재귀 알고리즘의 구현은 미로를 발행

이 논문은 미로 파이썬 재귀 알고리즘을 구현 문제의 예를 설명합니다. 다음과 같이 참조 용으로 공유 :

재귀는 무엇입니까?

이해하기 간단한 프로세스가 재귀라고 자신을 호출하는 기능입니다.

때 재귀를 사용하는 방법?

문제가 반복 소규모로 표현 될 수 있다면, 당신은 재귀 알고리즘을 사용할 수 있습니다.
미로 : 0 또는 1로 이루어진 2 차원 어레이는, (1) 지점으로 이동하는 것으로 가정하고, 그것을 0 지점으로 이동할 수있다, 방법 만 상하 각 중간 배열의 값이 1 점에서 진행하는 2 차원 어레이의 엣지로 이동하는 문제의 해결을 얻을 수있을 때의 단위 이동 사방은, 유사한 문제가 미로로 지칭 될 수있다.

당신은 중첩 된리스트는 파이썬에서 2 차원 배열을 나타냅니다 사용할 수 있습니다. [3] [3], 6 * 6 개시 가정 미로 배열 좌표로부터의 질문은, 미로의 성공 여부를 판단 할 수있다.

maze=[[1,0,0,1,0,1],
   [1,1,1,0,1,0],
   [0,0,1,0,1,0],
   [0,1,1,1,0,0],
   [0,0,0,1,0,0],
   [1,0,0,0,0,0]]

이 미로를 들어, 우리는 재귀 좋은 솔루션의 아이디어를 사용할 수 있습니다. 모든 문제를 이동하는 시간의 가동 포인트가 초기 상태와 같은 수평 및 수직 좌표를 가산 또는 감산하여 문제가 될 때마다 도트 배열의 경우, 점의 사방 쉽게 검색을 계속 나타낼 수있다 사방이 점을 찾아 이동 될 수 있으며, 공지 된 배열의 가장자리로 이동한다.

우리가 코딩 할 수 있습니다 :

# 判断坐标的有效性,如果超出数组边界或是不满足值为1的条件,说明该点无效返回False,否则返回True。
def valid(maze,x,y):
  if (x>=0 and x<len(maze) and y>=0 and y<len(maze[0]) and maze[x][y]==1):
    return True
  else:
    return False
# 移步函数实现
def walk(maze,x,y):
  # 如果位置是迷宫的出口,说明成功走出迷宫
  if(x==0 and y==0):
    print("successful!")
    return True
  # 递归主体实现
  if valid(maze,x,y):
    # print(x,y)
    maze[x][y]=2 # 做标记,防止折回
    # 针对四个方向依次试探,如果失败,撤销一步
    if not walk(maze,x-1,y):
      maze[x][y]=1
    elif not walk(maze,x,y-1):
      maze[x][y]=1
    elif not walk(maze,x+1,y):
      maze[x][y]=1
    elif not walk(maze,x,y+1):
      maze[x][y]=1
    else:
      return False # 无路可走说明,没有解 
  return True
walk(maze,3,3)

재귀 좋은 것은 아입니다!
, 그리고 마지막으로 공공 기관 [프로그래머]의 수에서 좋은 평판을 추천하는 방법에 많은보다 더의 콘텐츠, 고참, 기술을 학습 경험, 면접 스킬, 직장 경험과 다른 공유 학습이 많이있다, 더 많은 우리가주의 깊게 준비한 제로 파이썬 프로그래머 기술의 타이밍을 설명하기 위해 매일 실제 프로젝트 데이터에 대한 소개 정보는, 배우고 작은 세부 사항에주의 할 필요가하는 몇 가지 방법을 공유하는 관심의 I를 기억
그림 삽입 설명 여기

출시 여섯 개 원래 기사 · 원의 칭찬 0 · 조회수 4

추천

출처blog.csdn.net/chengxun02/article/details/104976841