挑战
编写接受“图像”并输出由该图像形成的图片迷宫的程序/功能。
输入值
您的程序应接受两个参数:
- 我,形成迷宫的形象
- S,一个布尔值,指定是否显示迷宫的解
我的格式如下:
.......
.#####.
.#####.
#######
.#####.
.#####.
.......
其中#
的是要包含在解决方案路径.
中的单元格,而的是要排除的单元格。您可以用任意选择的字符替换.
,,#
和换行符,只要它们彼此不同即可。或者,您可以接受输入图像的实际位图。
输出量
产生的迷宫应采用以下形式:
###############
# #
# ### ####### #
# #.........# #
# #.#######.# #
# #.#.......# #
###.#.#########
....#.#........
#####.#.#######
# ...#..... #
# #.#######.# #
# #.........# #
# ####### ### #
# # # #
###############
其中#
“”表示墙,.
“”表示路径中属于解决方案一部分的部分,空格是解决方案中排除的路径。该.
的可以通过空格替换如果S是虚假的。同样,可以将字符与您选择的其他字符交换,或者可以输出突出显示解决方案的迷宫的实际位图。
额外细节
- 路径必须是一个单元格宽(路径不能有巨大的空白空间)
- 迷宫不得包含任何循环
- 迷宫必须完全连接(必须从入口/出口到达所有牢房)
- 迷宫必须被墙壁包围(除非其进入/退出)
- 解决方案路径不得包含死角
- 迷宫必须正好有1个入口和1个出口
- 入口和出口必须与网格的边缘对齐并且与求解路径中包含的像元相邻
- 您可以选择入口和出口的放置位置
- 您可以假设可以从给定的输入图像形成有效路径
(为澄清起见添加)下图显示了解决方案路径如何与输入图像相关联:
Input (I): | Output: | Corresponding Cells:
| | (@'s denote #'s from I)
| |
....... | ############### | ###############
.#####. | # # | # #
.#####. | # ### ####### # | # ### ####### #
####### | # #.........# # | # #@.@.@.@.@# #
.#####. | # #.#######.# # | # #.#######.# #
.#####. | # #.#.......# # | # #@#@.@.@.@# #
....... | ###.#.######### | ###.#.#########
| ....#.#........ | .@.@#@#@.@.@.@.
| #####.#.####### | #####.#.#######
| # ...#..... # | # @.@#@.@.@ #
| # #.#######.# # | # #.#######.# #
| # #.........# # | # #@.@.@.@.@# #
| # ####### ### # | # ####### ### #
| # # # # | # # # #
| ############### | ###############
| |
测试用例
来自Wikipedia的喷壶示例:
输入:
..................
..................
.......####.......
......##..##......
.....##....##....#
.....#......#...##
.#############.##.
##..############..
#...###########...
#...##########....
#...##########....
#...##########....
#...##########....
....##########....
....##########....
....##########....
..................
..................
输出(S = false):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # # # # # # #
# # # ### ##### # ### ### # ### ### #
# # # # # # # # # # # # #
# ### # ##### ##### ### ##### # # ###
# # # # # # # # #
### ####### ### ### # ### ##### ### #
# # # # # # # # # # #
# ### ##### # ### ####### # # # # # #
# # # # # # # #
# # ##### ############# ### ### ### #
# # # # # # # # # #
# ### # ####### # ### ### # # ### # #
# # # # # # # # # #
# # # ### ######### # # ##### # #####
# # # # # # # # # # # #
# ##### # # ##### # ##### # # ### # #
# # # # # # # # # # #
# ### ### ### # ### # ##### ####### #
# # # # # # # # # #
# # # # ####### # ### # ##### # ### #
# # # # # # # # # # #
### # # # # # ############# # ### # #
# # # # # # # # # # #
##### # # ##### ####### # ### ##### #
# # # # # # # # #
##### # # # # ####### # ### #########
# # # # # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
输出(S = true):
#####################################
# # # # # # #
# ### ### ### # # ##### ### ### ### #
# # # # # # # # # # #
# ### # ##### # ########### # ### # #
# # # #....... # # # # #
# # # ### #####.# ###.### # ### ### #
# # # # #...# # #...# # # # #
# ### # #####.##### ###.##### # # ###
# # # ...# # #... # # #..
### #######.### ### # ###.##### ###.#
# # #.# # # #.# # #...#
# ### #####.# ### #######.# # # #.# #
# #.......#.............#...# #...# #
# #.#####.#############.###.###.### #
#...# #.......#.....#...#.#...# # #
#.### # #######.#.###.###.#.#.### # #
#.# # # .......#...#.#...#...# #
#.# # ###.#########.#.#.##### # #####
#.# # #.#.......#.#...#...# # # #
#.##### #.#.#####.#.#####.#.# ### # #
#. #.#...#...#.#.....#.# # # #
#.### ###.###.#.###.#.#####.####### #
#. # # #.....#.#...#.#..... # #
#.# # # #######.#.###.#.##### # ### #
..# # # #...#...#.....#.....# # # #
### # # #.#.#.#############.# ### # #
# # # #.#...#.........#...# # # #
##### # #.#####.#######.#.### ##### #
# # #.#...#.......#.#...# #
##### # #.#.#.#######.#.###.#########
# # ...#.........#..... # #
# ### ######### ############# # #####
# # # # # # # # #
# # ######### # ####### ####### ### #
# # # #
#####################################
位图示例(与上述迷宫相同):
4
可能只是我一个人,但我在输出迷宫中看不到输入图片。
—
Mike Bufardeci 2015年
@ mike-bufardeci添加了一个图,显示了输出迷宫中的输入图片。希望有帮助!
—
Dendrobium
似乎没有规则要求迷宫必须连接。这将是一个有效的解决方案吗?似乎也没有规定网格必须被墙壁包围(除非每个非墙壁都被视为入口或出口)。这将是一个有效的解决方案吗?
—
马丁·恩德
另外,请添加更多测试用例。
—
瑕疵的
@MartinBüttner迷宫应完全连接并被墙壁包围,编辑了阐明这些问题的问题。
—
Dendrobium