所谓规则,就是矩形,路线唯一,
所谓满,就是不能在原地图里再增加路或者分支,不会出现达不到的地方
如下例图:
█████████████████
█ █ █
█ ███ ███ █████ █
█ █ █ █ █
█ █ ███████ █ █ █
█ █ █ █ █
█ ███████ █ █████
█ █ █ █ █
█ █ ███████ ███ █
█ █ █ █
█ ███████ █████ █
█ █ █ █ █
███ █ █ ███████ █
█ █ █ █ █
█ ███ ███ █ █████
█ █
█████████████████
简单的来说,就是平面图的任意生成树问题,先讲个简单点的生成算法:随机DFS
用这个算法,生成的迷宫的特点是,分支不多,但往往很深,难度较大。
生成的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAZE_MAX
char map[MAZE_MAX+2][MAZE_MAX+2];
int search(int x,int y)
{
}
void Make_Maze(int x,int y)
{
}
int main(void)
{
}
复杂度O(xy),唯一缺点是这个代码用递归,在迷宫较大时,可能出现栈溢出,
要是需要生成大迷宫,就自己模拟栈即可。
代码变形:
为了使生成出来的地图更好看,像以下这种:
━━━━┳━━━┳━━━━━━━━━━━┓
┃ ┃ ┃
┃ ┃ ┃ ┃ ┃ ━━┓ ┏━━━━ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ┃ ┃ ┗━━━┳━┛ ┃ ┏━━━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ┗━┻━┳━━ ┃ ┏━┫ ┗━┓ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ━━┓ ┃ ┏━┛ ┃ ┗━┓ ┃ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━━ ┃ ┃ ┃ ━━┫ ┃ ┃ ┃ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ━━┻━┳━┫ ┃ ┣━┛ ┣━━ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━━━━ ┃ ┗━┛ ┃ ━━┛ ━━┛
┃ ┃ ┃
┗━━━━━┻━━━━━┻━━━━━━━━
要做到这种效果,其实我们只要在原来代码的输出的地方做一点手脚:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char cw[][4]={" ","┃","━","┗","┃","┃","┏","┣",
char m[50][50];
char* getw(int x, int y)
{
}
int sr(int x,int y)
{
}
void Make_Maze(int x,int y)
{
}
int main(void)
{
}