c - 仅使用两个字符打印迷宫
问题描述
我实际上是在用 C 语言编写一个程序来生成完美的迷宫。我在 ruby 中找到了这段代码:https ://gist.github.com/jamis/755866#file-recursive-backtracker2-rb并用 C 语言翻译了它。直到一切都正确并且算法可以正确生成迷宫。
我的问题是,那些迷宫需要打印三个字符。我只想要两个字符来打印它。我试图修改打印模式,但它不起作用。
例如,我想要一个像这样的迷宫:
#################################
# # # # # # #
# # ######### # # ### ### # # # #
# # # # # # # # # #
# ### ##### ### ####### # # ### #
# # # # # # # # #
# ##### # ### ### ### # ##### # #
# # # # # # # # # # #
# # # ##### ### ### ####### # # #
# # # # # # # # # # #
### # # ##### # # ### # # ##### #
# # # # # # #
# ####### ### ############# # # #
# # # # # # # #
# ############### ### # # ### # #
# # # # #
#################################
它打印如下:
___________________
|_ | _ _______ |
| | |_| _| | _| |
| |_ | |_ |_ | _|
| |___| _| _| | |
| | _| _ |___| | |
| |_| _| |___ |_ |
| | _| ___| ___| |
| _|_ | ___| ___|
|_ | |_ | _|_ |
|_____|___|_________|
任何人都知道我应该如何按照我想要的方式打印迷宫?我可以修改迷宫的尺寸或其他任何东西,我只想打印两个字符。
解决方案
对于您的两个字母迷宫,您需要两倍的行数。
将每个替换为连续行中|
的两个#
。
将每个替换_
为第一行
#
中的 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 让我改进了我的答案。)
推荐阅读
- visual-studio - cordovaProject.projectConfig.getFileResources 不是离子项目中的功能
- python - 使用 PIL 和 OpenCV 2 在 Python 中的轴越界错误
- google-cloud-platform - gsutil 总是尝试在启动时上传相同的文件并且在较大的文件上失败
- android - HERE-Android Prem SDK NavigationManager.RerouteListener
- javascript - 将字符串分解为一系列子字符串
- javascript - 即使值没有改变也会触发 onChange
- google-analytics - Google Analytics - 使用自定义维度过滤时,视图不会报告正确的数据
- javascript - D3 图表 SVG 响应条和轴
- c# - ASP.NET 移动应用程序通过请求简单的 GET 操作获得“500 内部服务器错误”
- javascript - bootstrap native 中的选项卡的 parentNode 是否为空?