查看状态是否可达的快速算法

时间:2015-03-20 02:18:04

标签: optimization artificial-intelligence

我有一个问题,我有一个二维地图,一个初始状态和一个目标状态(典型的空间状态问题)。我用A *解决了它,我没有遇到任何问题,但是我似乎无法找到采用初始状态,目标状态并说明它是否可解的好算法(如果目标状态可以从初始状态到达)州)。为了给出更多的上下文,这是我用A *解决的那种问题:

0120000000 
0111101111
0000100001
0101111101
0101100001
0101101111
0111100111
0000000000
0111010110
0000000110

其中0 =空的瓷砖,1 =封闭的瓷砖,2 =宝藏,机器人可以在任何空的瓷砖中。

有没有算法可以做到这一点? (最好比A *快)

2 个答案:

答案 0 :(得分:1)

您可以预处理地图,标记所有连接的组件。然后,可达性测试只需要比较标签。

void LabelConnectedComponents(const char ** map, int w, int h)
{
    char component = 'a';
    for (int y = 0; y != h; ++y)
    for (int x = 0; x != w; ++x)
    {
        if (map[y][x] == '0')
            FloodFill(map, w, h, x, y, component++);
    }
}

答案 1 :(得分:0)

你可以在这里使用简单的bfs或dfs,从起始节点开始并保留其邻居,我们可以移动。然后选择其中一个保留的节点,并将其尚未保存的邻居保留在同一个集合中,当我们遍历每个节点时,将它们标记为访问节点。当我们完成时,我们只检查目标节点是否被标记,以及它是否已经标记。