加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

本人目前最短的迷宫生成算法程序源代码

发布时间:2020-12-16 09:09:02 所属栏目:百科 来源:网络整理
导读:生成的结果示例: ━━━━┳━━┳━━┳━━━━━━┳━┓ ┃━━━┓┗━┏┛┏┓┃━┳┓━━━┫┃┃ ┣━━┓┣━┓┃━┫┃┗━┃┗━━┓┃┃┃ ┃┏━┃┃━┫┣┓┃┣━━┻━━┓┣━┛┃ ┃┣━━┻┓┃┃┣━┃━┳━┳━┃┃┏━┃ ┃┃┏┳
生成的结果示例:
 ━━━━┳━━┳━━┳━━━━━━┳━┓
┃━━━┓┗━┏┛┏┓┃━┳┓━━━┫┃┃
┣━━┓┣━┓┃━┫┃┗━┃┗━━┓┃┃┃
┃┏━┃┃━┫┣┓┃┣━━┻━━┓┣━┛┃
┃┣━━┻┓┃┃┣━┃━┳━┳━┃┃┏━┃
┃┃┏┳━┣━━┫┏┻┓┃┃┗┓┏┛┃━┫
┃┏┛┃━┫┏━┃┃┃┃┃┣┓┗┛┏┻━┃
┃┃┃┗┓┃┃┏┻━┫┏┛┃┃┏━┻┓━┫
┃┃┣━┗━┫┃━┓┃┃┏┛┃┃┏━┣━┃
┃┗┫┃┏━┻┳┓┗┳┫┃┃┃┃┃┏┻┓┃
┣━┃┃┃━┳┛┗━┃┃┃┗┳┛┃┃┃┗┫
┃┏┛┃┗┓┗━━┳━┃┗━┛━┻━┻┓┃
┃┃┃┗━┻━┳━┃┏┻━━┓┏━━━┛┃
┃┗┻┳━┏━┛┏┻┫┏━┓┃┃━━┳━┃
┣━━┃┃┃━━┛┃┃┃┃┃┗┻━━┃━┫
┗━━━┻┻━━━┻━┻┻━━━━━┻━ 
?
还能更短一些,比如改成格子形式的输出,那段放后面吧,现在先给出上图的生成代码
源代码(共25行):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fy[500][500];
int d[][2] = {{0,1},{1,0},{0,-1},{-1,0}};
char yzfy[][4]={" ","┃","━","┛","┓","┫",
?????"━","┗","┻","┏","┣","┳","╋"};
int w=20,h=15,rw = w+2,rh = h+2;
int dfs(int y,int x){
????if (fy[y][x]) return 0; else fy[y][x] |= 0x10;
????for (int f=rand()%4,i=0,p=rand()&1?3:1,u,v; i<4; ++i,f=(f+p)%4)
????????if (dfs(v=y+d[f][0],u=x+d[f][1]))
????????????fy[y][x] |= 1<<f,fy[v][u] |= (1<<((f+2)%4));
????return 1;
}
int main(){
????for (int y=0; y<rh; ++y) fy[y][0]|=10,fy[y][rw-1]|=10;
????for (int x=0; x<rw; ++x) fy[0][x]|=5,fy[rh-1][x]|=5;
????srand(time(NULL)); dfs(w/2,h/2); fy[1][1] |= 12; fy[rh-2][rw-2] |= 3;
????for (int y=1; y<rh; ++y,puts(""))
????????for (int x=1; x<rw; ++x)
????????????printf("%s",yzfy[15^((fy[y-1][x-1]&3)|(fy[y][x]&12))]);
????return 0;
}
?
?
以下为最短版本的输出效果:
███████████████████████████████
  █               █     █     █
█ ███████ █████ █ █ ███ █ ███ █
█ █     █   █   █ █ █ █   █ █ █
█ █ ███ ███ █ ███ █ █ █████ █ █
█ █ █   █   █   █   █ █     █ █
█ █ █ █████████ █████ █ ███ █ █
█   █           █   █   █ █   █
█████████████████ █ █ ███ █████
█             █   █ █   █ █   █
███████ █████ █ ███ ███ █ █ █ █
█     █     █ █ █ █   █ █ █ █ █
█ ███ ███████ █ █ ███ █ █ █ █ █
█ █ █     █   █ █   █ █ █ █ █ █
█ █ █████ █ █ █ █ █ █ █ █ █ █ █
█ █         █ █ █ █ █ █ █   █ █
█ █████████████ ███ █ █ █████ █
█   █   █   █   █   █ █ █     █
█ █ █ █ █ █ █ ███ █ █ █ █ ███ █
█ █   █   █       █ █     █    
███████████████████████████████
?
生成的源代码(有效行数10):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fy[500][500];
int d[][2] = {{0,0}},w=15,h=10,u=w*2+1,v=h*2+1;//1
int yzfy(int y,int x){//2
????if(x<1||y<1||x>=u-1||y>=v-1||fy[y][x])return 0;else fy[y][x]=1;//3
????for (int f=rand()%4,p=rand()&1?3:1; i<4; ++i,f=(f+p)%4)//4
????????if(yzfy(y+*d[f]*2,x+d[f][1]*2)) fy[y+*d[f]][x+d[f][1]]=1;//5
????return 1;//6
}
int main(){
????srand(time(NULL)); yzfy(1,1); fy[1][0] = fy[v-2][u-1] = 1;//7
????for (int y=0; y<v; ++y,puts(""))//8
????????for (int x=0; x<u; ++x)//9
????????????printf("%s",fy[y][x]?" ":"█");//10
????return 0;
}
?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读