@この記事は公開番号から来ています: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のコア知識を学び続け、コンピューターの基礎の詳細な研究を整理し、平凡になりたくない場合は、コーディングに参加して成長を続けてください!
実は、ここには技術だけでなく、それ以外のものもあり、例えば「絹糸」というよりも、どうやってプログラマーとして絶妙な存在になるのか、プログラマー自体が高貴な存在ですね。[参加するにはクリックしてください]自分らしくなりたい、高貴になりたい、さあ