当前位置: 首页 > news >正文

淄博哪有做网站的/友链交换平台

淄博哪有做网站的,友链交换平台,做外贸网站哪家效果好,网站开发技术简介使用深度优先算法生成迷宫 后面讲述的三种生成算法,都用到了一个中间矩阵。所以我们把对中间矩阵的处理放在了一个虚类里。中间矩阵是一个三维矩阵,前面两维还是行和列,而最后一维则表示:左、上、右、下的墙是否存在,…

使用深度优先算法生成迷宫

后面讲述的三种生成算法,都用到了一个中间矩阵。所以我们把对中间矩阵的处理放在了一个虚类里。中间矩阵是一个三维矩阵,前面两维还是行和列,而最后一维则表示:左、上、右、下的墙是否存在,以及本格子是否访问过。

/// <summary>
/// 迷宫接口2
/// </summary>
public abstract class IMaze2 : IMaze
{/// <summary>/// 中间矩阵/// </summary>protected int[,,] M;/// <summary>/// 初始化中间矩阵/// </summary>protected void InitM(){int[,,] M = new int[room_row, room_col, 5];for (int i = 0; i < room_row; i++){for (int j = 0; j < room_col; j++){for (int k = 0; k < 5; k++){M[i, j, k] = 0;}}}}/// <summary>/// 解析中间矩阵/// </summary>protected void ParseM(){for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1){maze[i, j] = 1;}else{if (i % 2 == 0){if (j % 2 == 0){maze[i, j] = 1;}else{maze[i, j] = M[i / 2 - 1, (j - 1) / 2, 3] == 1 ? 0 : 1;}}else{if (j % 2 == 0){maze[i, j] = M[(i - 1) / 2, j / 2 - 1, 2] == 1 ? 0 : 1;}else{maze[i, j] = 0;}}}}}}
}

深度优先算法是很好理解的,其算法思路是:

(1)把起点S放到一个堆栈里。

(2)从堆栈里弹出一个格子,然后随机选择一个相邻并且没有访问过的格子。打通本格子与相邻格子的墙。

(3)把相邻的格子放入堆栈。重复第二步。

代码如下:

public override void Build()
{InitM();int r = 0;int c = 0;Stack<Position> history = new Stack<Position>();history.Push(GetPosition(r, c));Random rand = new Random();while (history.Count != 0){M[r, c, 4] = 1;List<char> directions = new List<char>();if (c > 0 && M[r, c - 1, 4] == 0){directions.Add('L');}if (r > 0 && M[r - 1, c, 4] == 0){directions.Add('U');}if (c < room_col - 1 && M[r, c + 1, 4] == 0){directions.Add('R');}if (r < room_row - 1 && M[r + 1, c, 4] == 0){directions.Add('D');}if (directions.Count != 0){history.Push(GetPosition(r, c));int direction_index = rand.Next(directions.Count);char direction = directions[direction_index];switch (direction){case 'L':M[r, c, 0] = 1;c = c - 1;M[r, c, 2] = 1;break;case 'U':M[r, c, 1] = 1;r = r - 1;M[r, c, 3] = 1;break;case 'R':M[r, c, 2] = 1;c = c + 1;M[r, c, 0] = 1;break;case 'D':M[r, c, 3] = 1;r = r + 1;M[r, c, 1] = 1;break;}}else{Position pos = history.Pop();r = pos.row;c = pos.col;}}ParseM();
}

算法结束之后,所有格子都是相通的。生成的迷宫如下图所示:

用深度优先算法生成的迷宫特点是:路径几乎唯一,很好走,但特别长。

http://www.lbrq.cn/news/1290385.html

相关文章:

  • wordpress 科技感主题/信阳搜索引擎优化
  • 网站建设协议/app开发公司排名
  • 佛山网站建设哪个好点/seo系统培训课程
  • 甘肃网站seo哪家公司好/seo怎么做新手入门
  • 网站建设方案书是什么意思/何鹏seo
  • 网页设计网站怎么放到域名里/福州百度seo代理
  • 专业做网站的团队/国外网站
  • 鄂州做网站报价/百度网盘网站入口
  • 网络优化怎么自己做网站/宁波网络推广平台
  • qq查冻结网站怎么做/网络防御中心
  • 平面设计学院/对网站的建议和优化
  • 江门网站设计素材/万网域名续费
  • 网站 建设 函/seo网站推广经理
  • 免费发广告网站/疫情放开死亡人数最新消息
  • 网站建设的工作总结/站长统计app软件下载2021
  • 个人备案做企业网站/东莞网站提升排名
  • 一个空间怎么放2个网站/广州最新疫情最新消息
  • 移动版网站建设的必要性/电商网站建设公司哪家好
  • 做ui必要的网站/链接交换平台
  • 安徽网站排名/广州seo推广服务
  • 我想自己做网站可以赚钱/交换友链
  • 云制造网站/推广发帖网站
  • 天津网站营销/平台广告推广
  • 建设官方网站企业网银登录/百度推广的优势
  • 广州在线网站制作/济宁百度竞价推广
  • 网站建设应走什么会计科目/爱站网关键词密度
  • 软件开发工具属于/企业seo关键字优化
  • 怎么给网站做https/成品网站源码在线看
  • 南京网站设计制作/企业培训有哪些方面
  • 中英文网站后台/电子商务与网络营销教案
  • 开源 Arkts 鸿蒙应用 开发(十)通讯--Http数据传输
  • 在github上搭建自己主页
  • boost::asio 中 io_service与线程的关系
  • ACE 插入元件
  • 14.7 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀
  • Vue过度与动画效果