首页 > 解决方案 > 仅使用两个字符打印迷宫

问题描述

我实际上是在用 C 语言编写一个程序来生成完美的迷宫。我在 ruby​​ 中找到了这段代码:https ://gist.github.com/jamis/755866#file-recursive-backtracker2-rb并用 C 语言翻译了它。直到一切都正确并且算法可以正确生成迷宫。

我的问题是,那些迷宫需要打印三个字符。我只想要两个字符来打印它。我试图修改打印模式,但它不起作用。

例如,我想要一个像这样的迷宫:

#################################
# #           #     #     # #   #
# # ######### # # ### ### # # # #
# #       #   # #     #   # # # #
# ### ##### ### ####### # # ### #
#     #     #   #     # # #   # #
# ##### # ### ### ### # ##### # #
# # #   # #   #   #   #     # # #
# # # ##### ### ### ####### # # #
#   # #     # # # #   #   #   # #
### # # ##### # # ### # # ##### #
#   #   #   #       #   #       #
# ####### ### ############# # # #
# #             #     #   # # # #
# ############### ### # # ### # #
#                 #     #     # #
#################################

它打印如下:

 ___________________
|_  |  _   _______  |
| | |_|  _|   |  _| |
| |_  | |_  |_  |  _|
|   |___|  _|  _| | |
| |  _|  _  |___| | |
| |_|  _| |___  |_  |
| |  _|  ___|  ___| |
|  _|_  |  ___|  ___|
|_  |   |_  |  _|_  |
|_____|___|_________|

任何人都知道我应该如何按照我想要的方式打印迷宫?我可以修改迷宫的尺寸或其他任何东西,我只想打印两个字符。

标签: carraysrubymaze

解决方案


对于您的两个字母迷宫,您需要两倍的行数。
将每个替换为连续行中|的两个#
将每个替换_第一行#中的 a 和第二行中的 a。
将每个替换为连续行中的两个
如果纵横比不喜欢你,也将列加倍并使用每个字母两次。

'|' to '#' in row 1
       '#' in row 2

'_' to ' ' in row 1
       '#' in row 2

' ' to ' ' in row 1
       ' ' in row 2 

例如,这将是一个没有内墙的空 1x2 迷宫。

 _
| |
|_|

表示为

 #
# #
# #
# #
###

它忠实地复制输入左上角和右上角的“间隙”/“孔”。
它还演示了“纵横比”问题。

这是我为配给问题提出的替代表示。

  ##
##  ##
##  ##
##  ##
######

甚至三倍,让它更“方形”。

   ### 
###   ###
###   ###
###   ###
#########

为了填补这些漏洞,您必须在输入中检测到它们(我认为该算法超出了范围,但如果您不这样做,请告诉我)。

._.
| |
|_|

然后你也可以像这样替换它们_并得到

###
# #
# #
# #
###

从提问者最后的评论来看,这是令人满意的。我觉得我应该感谢 Aleksei Matiushkin 让我改进了我的答案。


推荐阅读