网站大量收购独家精品文档,联系QQ:2885784924

课程设计演示 编制一个求解迷宫通路的程序.ppt

课程设计演示 编制一个求解迷宫通路的程序.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计演示 编制一个求解迷宫通路的程序.ppt

数据结构课程设计 -----编制一个求解迷宫通路的程序 模块设计 本程序除主函数模块外总计5个模块: 栈模块--实现栈抽象数据类型 迷宫模块--实现迷宫抽象数据类型 迷宫随机地图生成模块--用户自定义迷宫地图的生成 菜单模块--实现与用户交互菜单 游戏模块--实现游戏功能 负责实现其中的: 迷宫随机地图生成模块,菜单模块,游戏模块. 模块设计 模块设计 随机地图生成模块 算法设计: 平面图的任意生成树,使用随机DFS. 算法思路: 算法通过 n * m 矩阵的每一个点 i,j 映射到矩阵 ( 2*n+3 ) * ( 2*m+3 ) 的点 2*i,2*j上,通过DFS对i,j的对应点 2*i,2*j进行遍历,使之形成通路. 算法分析: 用这个算法,生成的迷宫的特点是,分支不多,但往往很深,难度较大.算法最好情况下时间复杂度为:O(n+m),最坏情况下时间复杂度为:O(n*m),平均时间复杂度为: O(n*m) 随机地图生成模块 假设用户输入 n = 3,m = 3: 随机地图生成模块 迷宫生成算法: void Make_Maze(int map[MAZE_MAX+2][MAZE_MAX+2],int x,int y) { int z1,z2; for(z1=0,z2=2*y+2;z1=2*x+2;z1++) map[z1][0]=1,map[z1][z2]=1; for(z1=0,z2=2*x+2;z1=2*y+2;z1++) map[0][z1]=1,map[z2][z1]=1; srand((unsigned)time(NULL)); search(map,rand()%x+1,rand()%y+1); map[1][2]=1; map[2*x+1][2*y]=1; } 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 使用 DFS 递归生成迷宫: int search(int map[MAZE_MAX+2][MAZE_MAX+2],int x,int y) { static int d[4][2]={0,1,1,0,0,-1,-1,0}; int zx=x*2,zy=y*2,next,turn,i; map[zx][zy]=1; turn = rand()%2 ? 1 : 3; for(i=0,next=rand()%4; i4; i++,next=(next+turn)%4) if(map[zx+2*d[next][0] ][ zy+2*d[next][1]]==0 ) { map[zx+d[next][0]][zy+d[next][1]]=1; search(map,x+d[next][0],y+d[next][1]); } return 0; } 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 i,j --- 2*i,2*j : 随机地图生成模块 void Maze_File_Make (int mazeMap[MAZE_MAX * 2][MAZE_MAX * 2],int x,int y ){ memset (map,0,sizeof(map)); Make_Maze(map,x,y); FILE * outCreat; outCreat = fopen(mazeCreate.out,w); FILE * outBiData; outBiData = fopen(mazeBiData.in,w); for(int j=1;j=y*2+1;j++){ for(int i=1;i=x*2+1;i++){ fprintf ( outCreat,%s ,( map[i][j]? :█) ); fprintf ( outBiData,%d ,( map[i][j] = map[i][j] ? 0 : 1 ) ); } if(j=y*2){ fprintf ( outCreat,\n ); fprintf(outBiDa

文档评论(0)

zhengyl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档