宽度优先搜索8拼图

时间:2016-11-09 22:51:07

标签: algorithm optimization time-complexity breadth-first-search

我被要求实施宽度优先搜索以解决八个谜题,用一个包含9个元素的向量表示每个状态,将图块编号(或间隙为0)存储为位置中的数据。

例如[1, 3, 4, 2, 8, 0, 6, 7, 5]表示:

1 3 4
2 8 # <- Gap here
6 7 5

到目前为止,我的伪编码算法是:

startnode.configuration = start
startnode.parent        = NIL
startnode.distance      = 0
startnode.state         = DISCOVERED
nodes_to_process        = queue {}
nodes_to_process.enqueue(startnode)
while nodes_to_process is not empty
    node = nodes_to_process.dequeue()
    for each neighbour in NEIGHBOURS(node)
        if neighbour.state == UNDISCOVERED
            neighbour.distance = node.distance + 1
            neighbour.parent   = node
            neighbour.state    = DISCOVERED

问题在于:当我添加新邻居时,如何跟踪哪些节点已被分配为已访问?我应该逐个比较状态数组(preferaby有一组有序的),还是有更精细的方法,我可以跳过这个数组比较步骤?搜索的最佳算法复杂度为O(N * ln N)吗?

0 个答案:

没有答案