最近准备面试一家游戏公司,不得不说游戏公司现在真不好进啊(是不是我太菜了TAT)。终于有了一家找我上来就甩给我一道题,初级Unity面试题。需求如下:
1.有且只有一条正确路径
2.每一个格子都是连通的
3.每一个格子至少有一面墙
4.用Unity实现
5.需要两个按钮一个重新生成新迷宫,一个自动寻路。
平常的时候我也是比较注重算法训练,但是刚刚上手这个题目还是有一点点懵,所以网上查了一下资料。我当时主要看的算法有两种,第一种Prime算法,第二种深度优先探索(DFS)。大神们写的都很好,做的时候我也有了一些自己的心得,以此记录一下。
首先是Prime,这种算法的思路:
1.建一个数组,将数组中所有元素初始设为墙。(我用的int数组,0是墙,路是1)
2.做一个预处理,先将迷宫最外层先全部设置成路。(这是为了后面迷宫生成的判断条件,并保护最外层迷宫)
3.随机在迷宫中选择一个墙加入数组,最好不要选择最外层,后面的起点终点方便规定一些。
4.做一个While循环,条件是数组中元素不为0,每一次循环,随机在数组中挑选一个元素(墙)出来,并判断该墙四周的路是否小于等于1,若符合则将该墙变为路,并将该墙四周的墙新加入数组。
5.跳出循环后规定起点和终点。(条件是起点,终点的墙必须和里面的路连通)
这样我们的迷宫数组就规划好啦,剩下还有一个难点,就是自动寻路功能。这也是Prime在本题里面不太好用的地方,