Python基本チュートリアル:迷路問題を達成するための再帰的アルゴリズムに基づくPython

@この記事は公開番号から来ています:csdn2299、公開番号プログラマアカデミーに注目したい
この記事では、迷路を達成するための再帰アルゴリズムに基づくPythonの問題について説明します。次のように、参考のために共有してください。

再帰とは何ですか?

簡単に理解すると、関数呼び出し自体のプロセスは再帰と呼ばれます。

再帰はいつ使用されますか?

問題を小規模な反復操作として表現できる場合は、再帰的アルゴリズムを使用できます。
迷路問題:0または1で構成される2次元配列で、1は移動可能な点であり、0は移動できない点であると仮定します。配列の中央にある値1の点から開始する方法、それぞれは上向きと下向きのみです。左右に1単位ずつ移動します。2次元配列の端に移動すると、問題の解決策が得られます。同様の問題は、迷路問題と呼ばれます。

リストのネストを使用して、Pythonで2次元配列を表すことができます。6 * 6の迷路を想定すると、問題は配列座標[3] [3]から始まり、迷路から正常に抜け出せるかどうかを判断します。

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]]

この迷路問題については、再帰的なアイデアを使用して問題をうまく解決できます。配列内の点については、点の4方向は、水平座標と垂直座標の加算と減算で簡単に表すことができます。可動点が移動するたびに、問題全体が初期状態と同じ問題になります。検索を続行してください配列の端に移動することを認識して、4方向に移動できる点を見つけます。

したがって、次のようにコーディングできます。

# 判断坐标的有效性,如果超出数组边界或是不满足值为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)

再帰は良いことです!

読んでいただきありがとうございます
。大学でpythonを学ぶことを選んだとき、コンピュータの基礎がおかしいことに気付きました。学業資格はあり
ませんでした。これは何もする必要はありません。それを補うことしかできません。道は、Pythonのコア知識を学び続け、コンピューターの基礎の詳細な研究を整理し、平凡になりたくない場合は、コーディングに参加して成長を続けてください!
実は、ここには技術だけでなく、それ以外のものもあり、例えば「絹糸」というよりも、どうやってプログラマーとして絶妙な存在になるのか、プログラマー自体が高貴な存在ですね。[参加するにはクリックしてください]自分らしくなりたい、高貴になりたい、さあ

50件の元の記事を公開 21件の賞賛 20,000回以上の閲覧

おすすめ

転載: blog.csdn.net/chengxun03/article/details/105545232