迷路の問題を解決するための Python のバックトラッキング サブセット ツリー テンプレートの使用方法の詳細な説明
この記事では、迷路問題を解決するための Python のバックトラッキング手法の使用について主に紹介し、迷路問題の原理を簡単に説明し、バックトラッキング手法のサブセット ツリー テンプレートに基づいて Python で迷路問題を解くための関連する操作スキルと注意事項を分析します。ご参考までに、
この記事の例では、Python がバックトラッキング手法を使用して迷路の問題を解決する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
問題
迷路が与えられた場合、入り口はわかっています。入口から出口までの経路があるかどうかを尋ね、存在する場合はその経路を出力します。なお、移動は上下左右、左上、右上、左下、右下の 8 方向に実行できます。迷路に 0 を入力すると歩行可能、1 を入力すると壁になります。便宜上、境界の問題を避けるために迷路を 1 で囲みます。
分析
左右を相対的なものとして、北、北東、東、南東、南、南西、西、北西の8方向に修正します。どのグリッドでも、8 つの方向、つまり 8 つの状態から選択できます。したがって、グリッドに入るたびに、入口グリッドから開始して、これらの 8 つの状態を通過する必要があります。
明らかに、バックトラッキング手法のサブセットツリーテンプレートを適用できます。
ソリューションの長さは固定されていないことに注意してください。
コード
# 迷宫(1是墙,0是通路) maze = [[1,1,1,1,1,1,1,1,1,1], [0,0,1,0,1,1,1,1,0,1], [1,1,0,1,0,1,1,0,1,1], [1,0,1,1,1,0,0,1,1,1], [1,1,1,0,0,1,1,0,1,1], [1,1,0,1,1,1,1,1,0,1], [1,0,1,0,0,1,1,1,1,0], [1,1,1,1,1,0,1,1,1,1]] m, n = 8, 10 # 8行,10列 entry = (1,0) # 迷宫入口 path = [entry] # 一个解(路径) paths = [] # 一组解 # 移动的方向(顺时针8个:N, EN, E, ES, S, WS, W, WN) directions = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)] # 冲突检测 def conflict(nx, ny): global m,n,maze # 是否在迷宫中,以及是否可通行 if 0 <= nx < m and 0 <= ny < n and maze[nx][ny]==0: return False return True # 套用子集树模板 def walk(x, y): # 到达(x,y)格子 global entry,m,n,maze,path,paths,directions if (x,y) != entry and (x % (m-1) ==0 or y % (n-1) == 0): # 出口 #print(path) paths.append(path[:]) # 直接保存,未做最优化 else: for d in directions: # 遍历8个方向(亦即8个状态) nx, ny = x+d[0], y+d[1] path.append((nx,ny)) # 保存,新坐标入栈 if not conflict(nx, ny): # 剪枝 maze[nx][ny] = 2 # 标记,已访问(奇怪,此两句只能放在if区块内!) walk(nx, ny) maze[nx][ny] = 0 # 回溯,恢复 path.pop() # 回溯,出栈 # 解的可视化(根据一个解x,复原迷宫路径,'2'表示通路) def show(path): global maze import pprint, copy maze2 = copy.deepcopy(maze) for p in path: maze2[p[0]][p[1]] = 2 # 通路 pprint.pprint(maze) # 原迷宫 print() pprint.pprint(maze2) # 带通路的迷宫 # 测试 walk(1,0) print(paths[-1], '\n') # 看看最后一条路径 show(paths[-1])
レンダリング
以上が迷路の問題を解決するための Python のバックトラッキング サブセット ツリー テンプレートの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...

正規表現を使用して、最初の閉じたタグと停止に一致する方法は? HTMLまたは他のマークアップ言語を扱う場合、しばしば正規表現が必要です...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
