最近在小百合上看到有人贴了一个迷宫:
有人说SOHU上有人用什么小工具20分钟才走出来,突发奇想,如果自己做个程序几分钟能走出来?因为记得很早(80/90年代)有看过一本名叫《智力》的杂志,每期都有复杂的迷宫,而且走出来之后路线能够形成图案,所以也很好奇这个迷宫走出来是个啥图案。
脑子中第一个闪过的念头就是地球人都知道的迷宫算法:贴着一边的墙走,当然也可以做深度有限/广度优先的搜索,方法是挺简单,就是不知道要用多长时间。
于是想用个东西先试试看,首先想到的是画笔程序,用填充工具在迷宫的空白道路上一点,靠,居然过了几乎有半分钟才出结果。结果令人沮丧,迷宫的道路是连通,所有的路都被涂上颜色了。这个画笔不知道用的什么搜索算法来填充的,真是太慢了。
又改用Photoshop,果然是强,半秒钟不到,它就能把迷宫填满了。可惜问题还是没解决。难道真要自己写个程序?
突然想到在哪里看到过(《皇帝新脑》?)的一个二维动物问题,说一个二维动物如果有口也有另外的肛门,那么这个动物肯定被分成两半了(废话!)。迷宫不就是个分成两半的二维动物吗?“肠道”便是走出迷宫的路线。所以不应该涂“道路”,而应该去涂“墙”。
还是用画笔,用填充工具随便找个黑色的墙一点,这下倒是很快,1秒不到,迷宫被分成了两半,中间的分界便是答案!挺有意思的,所有的这种迷宫应该都可以这样解决了,不用什么其它工具,1秒便可解决。
不过要说算法的时间复杂度,这个涂墙的方法可能最小复杂度会比找路的大,但是平均复杂度应该差不多。