以此加权图为例,用Python实现A*算法。加权图中的节点用粉红色圆圈表示,并且给出了沿节点的路径的权重。节点上方的数字代表节点的启发式值。

首先为算法创建类。一个用于存储与起始节点的距离,另一个用于存储父节点。并将它们初始化为0,以及起始节点。
def aStarAlgo(start_node,stop_node): open_set=set(start_node) closed_set=set() g={} parents={} g[start_node]=0 parents[start_node]=start_node
找到具有最低f(n)值的相邻节点,针对到达目标节点的条件进行编码。如果不是这种情况,则将当前节点放入打开列表中,并设置其父节点。
While len(open_set)>0: n=None for v in open_set: if n==None or g[v]+heuristic(v)<g[n]+heuristic(n): n=v if n==stop_node or Graph_nodes[n]==None: pass else: for(m,weight)in get_neighbors(n): if m not in open_set and m not in closed_set: open_set.add(m) parents[m]=n g[m]=g[n]+weight
如果相邻的g值低于当前节点并且在封闭列表中,则将其替换为这个新节点作为父节点。
else: if g[m]>g[n]+weight: g[m]=g[n]+weight parents[m]=n if m in closed_set: closed_set.remove(m) open_set.add(m)
如果当前g低于前一个g,并且其相邻在open list中,则将其替换为较低的g值,并将相邻的parent更改为当前节点。
如果不在两个列表中,则将其添加到打开列表并设置其g值。
if n==None: print('Path does not exist!') return None if n==stop_node: path=[] while parents[n]!=n: path.append(n) n=parents[n] path.append(start_node) path.reverse() print('Path found:{}'.format(path)) return path open_set.remove(n) closed_set.add(n) print('Path does not exist!') return None
现在,定义一个函数来返回相邻节点及其距离。
def get_neighbors(v): if v in Graph_nodes: return Graph_nodes[v] else: return None
此外,创建一个函数来检查启发式值。
def heuristic(n): H_dist={ 'A':11, 'B':6, 'C':99, 'D':1, 'E':7, 'G':0, } return H_dist[n]
描述一下图表并调用A*函数。
Graph_nodes={ 'A':[('B',2),('E',3)], 'B':[('C',1),('G',9)], 'C':Node, 'E':[('D',6)], 'D':[('G',1)], } aStarAlgo('A','G')
算法遍历图,找到代价最小的路径。
这是通过E => D => G。
以上がPython で A* アルゴリズムを実装する詳細な手順を学習します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

Inpython、「リスト」は、「リスト」、自由主義的なもの、samememory効率が高く、均質な偶然の瞬間の想起された「アレイ」の「アレイ」の「アレイ」の均質な偶発的な想起されたものです

pythonlistsandarraysaraybothmutable.1)listsareflexibleandsupportheTeterdatabutarlessmemory-efficient.2)Arraysaremorememory-efficientiant forhomogeneousdative、ressivelessatile、ressing comerttytytypecodeusageodoavoiderorors。

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

PythonまたはCの選択は、プロジェクトの要件に依存します。1)迅速な開発、データ処理、およびプロトタイプ設計が必要な場合は、Pythonを選択します。 2)高性能、低レイテンシ、および緊密なハードウェアコントロールが必要な場合は、Cを選択します。

毎日2時間のPython学習を投資することで、プログラミングスキルを効果的に改善できます。 1.新しい知識を学ぶ:ドキュメントを読むか、チュートリアルを見る。 2。練習:コードと完全な演習を書きます。 3。レビュー:学んだコンテンツを統合します。 4。プロジェクトの実践:実際のプロジェクトで学んだことを適用します。このような構造化された学習計画は、Pythonを体系的にマスターし、キャリア目標を達成するのに役立ちます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック









