| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1524 人关注过本帖
标题:求一个随机生成迷宫的算法~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:20 回复次数:2 
求一个随机生成迷宫的算法~
就是求一个能自动生成地图的迷宫算法……并且保证要有出口解~这个我一时也实现不了发个贴来看看怎么弄~~~
搜索更多相关主题的帖子: 随机 生成 迷宫 算法 地图 
2017-10-19 12:29
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:20 
过去写的,你可以参考下(其实我还有一个随机走水平和垂直线路的方案,那样或许能够产生蛇弓型路径)。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 22
void makeline(int a[][N],int x1,int y1,int x2,int y2)
{//产生直线路径
    int xs=x2-x1,ys=y2-y1;
    double k,w1,w2;
    k=(double)ys/((double)xs+0.00001);
    xs=xs<0?-1:(xs>0?1:xs);
    ys=ys<0?-1:(ys>0?1:ys);
    while(x1!=x2||y1!=y2)
    {
        a[x1][y1]=0;
        if(xs&&ys)
        {
            w1=k-(y2-y1)/((double)(x2-x1-xs)+0.00001);
            w2=k-(y2-y1-ys)/((double)(x2-x1)+0.00001);
            if(w1<0)w1=-w1;
            if(w2<0)w2=-w2;
            if(w1<w2)x1+=xs;
            else y1+=ys;
        }
        else
        {
            if(xs)x1+=xs;
            else y1+=ys;
        }
    }
    a[x1][y1]=0;    
}
void makepath(int a[][N])
{
    //产生随机路径
    int i,j,k,x1,x2,y1,y2;
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            k=rand()%1000;
            if(k>100&&k<350&&i>0&&i<N-1&&j>0&&j<N-1)a[i][j]=0;  //产生随机点
            else a[i][j]=1;
        }
    }
    x1=x2=y1=y2=1;
    for(i=0;i<12;i++)
    {
        x2=rand()%(N-2)+1;
        y2=rand()%(N-2)+1;
        makeline(a,x1,y1,x2,y2);    //产生12根随机直线,第一根线起点是入口,最后一根线终点在出口
        x1=x2;
        y1=y2;
    }
    x2=y2=N-2;
    makeline(a,x1,y1,x2,y2);       
    a[1][0]='I';
    a[N-2][N-1]='O';
}
int main()
{
    int a[N][N];
    int i,j;
    srand((unsigned)time(NULL));
    makepath(a);
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            if(a[i][j]>32)printf("%c%c",a[i][j],a[i][j]);
            else if(a[i][j])printf("");
            else printf("  ");
        }
        printf("\n");
    }
    return 0;
}
2017-10-19 21:02
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
哈哈,其实这是个委托,在此先代表拜谢~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-19 21:43
快速回复:求一个随机生成迷宫的算法~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017882 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved