迷宫算法问题
有一个关于迷宫算法的题目,题目如下:
我们正计划一个定向越野比赛。
这个游戏的目的是到达目标(G)从一开始(S)的最短距离。
然而,球员必须通过所有的检查点(@)在地图上。
########
#@ . . . G#
##.##@##
#. . @ . .S#
#@ . . . . .#
########
*地图由以下5个特点。
你可以认为地图不包含无效字符,
地图上有一个确切的开始符号“S”和“G”一个确切的目标符号。
*“S”意味着定向运动的开始。
*“G”是指定向目标。
*“@”意味着一种定向检查点。
*’。”意味着一块,玩家可以通过的点。
*”#”意味着一个封闭的块,玩家不能通过。
*可以只通过垂直或水平一步(上,下,左,右)的
下一个街区。
其他类型的运动,如移动对角线(左上,右上,左下和右下)
跳过一个或多个数据块,是不允许的。
*你不能滚出去的地图。
*距离被定义为运动的不同的块的数量。
*你可以通过打开块,检查站,一开始,和目标不止一次,如果有必要的话。
*你可以假设参数满足以下条件。
* 1<=宽度<= 100
* 1<=高度≤100
*检查站的最大数是18。
*返回1如果给定的参数不满足规格,或球员无法到达的目标
从一开始通过的所有关卡。
输入
5 5
#####
#.@@#
#S###
#..G#
#####
输出
9
Result path (x, y): (1, 2) => (1, 1) => (2, 1) => (3, 1) => (2, 1) => (1, 1) => (1, 2) => (1, 3) => (2, 3)
=> (3, 3).
用C++实现