我正在将俄罗斯方块作为一个有趣的副项目(不是家庭作业),并希望实现人工智能,以便计算机可以自己玩。我听说这样做的方式是使用 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) 循环遍历节点队列,将visited加入队列
- 创建一个新队列:
Queue q = new LinkedList();
- 添加
rootNode
到队列:q.add(rootNode)
- 将访问标志设置为 true:
rootNode.visited(true)
这是我不明白的部分...
- 虽然 Queue 不为空...您应该创建一个新节点并将其设置为等于 Queue 的已删除节点:
Node n = (Node)q.remove()
但是,如果您要向其中添加节点q.add(rootNode)
并且q.add(child)
,它什么时候会是空的?
- 接下来,检查 while child node = an unvisited child node and is not null,
while((child=getUnvisitedChildNode(n))!=null)
,您应该更改孩子的已访问状态 =true
然后将其添加到队列中,q.add(child)
...但是您不是在做这一切while(!q.isEmpty())
吗?那么,q
如果您要添加它,什么时候会是空的?
我的队列的目的是什么q
?是结果队列吗?
谢谢