我有一个问题,我有一个二维地图,一个初始状态和一个目标状态(典型的空间状态问题)。我用A *解决了它,我没有遇到任何问题,但是我似乎无法找到采用初始状态,目标状态并说明它是否可解的好算法(如果目标状态可以从初始状态到达)州)。为了给出更多的上下文,这是我用A *解决的那种问题:
0120000000 0111101111 0000100001 0101111101 0101100001 0101101111 0111100111 0000000000 0111010110 0000000110
其中0 =空的瓷砖,1 =封闭的瓷砖,2 =宝藏,机器人可以在任何空的瓷砖中。
有没有算法可以做到这一点? (最好比A *快)
答案 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,从起始节点开始并保留其邻居,我们可以移动。然后选择其中一个保留的节点,并将其尚未保存的邻居保留在同一个集合中,当我们遍历每个节点时,将它们标记为访问节点。当我们完成时,我们只检查目标节点是否被标记,以及它是否已经标记。