私は Tetris を (宿題ではなく) 楽しいサイド プロジェクトとして作成しており、AI を実装してコンピューターが自動的にプレイできるようにしたいと考えています。私が聞いた方法は、BFS を使用して利用可能な場所を検索し、最も賢明なドロップ場所の集計スコアを作成することです...
しかし、アルゴリズムを理解するのに苦労しています。これまでのところ、私がそれを理解する方法は次のとおりです。
1) ノードを ArrayList に追加する
nodeList.add(n nodes)
2) ノードを接続する
- 隣接行列を使用します。
adjMatrix[sizeOfNodeList][sizeOfNodeList]
接続するノードを渡します: ex:
connectNode(nodeA, nodeB);
、呼び出し:connectNode(Node from, Node to)
:int fromNode=nodesList.indexOf(from); int toNode=nodesList.indexOf(to); //connect node A to B and B to A, set that i,j position = 1 adjMatrix[fromNode][toNode]=1; adjMatrix[toNode][fromNode]=1;
ノードが隣接行列で接続された後...
3) ノードのキューをループし、訪問済みをキューに追加します
- 新しいキューを作成します。
Queue q = new LinkedList();
rootNode
キューに追加:q.add(rootNode)
- 訪問済みフラグを true に設定します。
rootNode.visited(true)
わからない部分です…
- キューが空ではない間...新しいノードを作成し、キューの削除されたノードと等しくなるように設定する必要があります。
Node n = (Node)q.remove()
しかし、それにノードを追加している場合q.add(rootNode)
、q.add(child)
いつ空になるのでしょうか?
- 次に、子ノード = 未訪問の子ノードであり、null ではないことを確認し
while((child=getUnvisitedChildNode(n))!=null)
ます。子の訪問済みステータスを変更することになっています =true
その後、それをキューに追加しq.add(child)
ます...しかし、これをすべて行っていませんwhile(!q.isEmpty())
か? では、追加する場合、いつq
空になりますか?
私の Queue の目的は何q
ですか? 結果のキューですか?
ありがとう