云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构与算法课程设计报告-哈工大-应用不相交集合生成随即迷宫 - 图文

数据结构与算法课程设计报告-哈工大-应用不相交集合生成随即迷宫 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 13:39:18

哈尔滨工业大学课程设计报告

3 算法实现

3.1 开发语言及工具

开发语言:JAVA 开发工具:eclipse

3.2 算法关键代码

3.2.1 构建随机迷宫算法关键代码

public void CreateMaze(int Maze[][]) { //生成随机迷宫,存在二维数组Maze中

int x,y,i,j,d,xt1,yt1,xt2,yt2,count = n*n; Init(); //初始化等价类

for(i = 0;i < wid;i++) { //初始化二维数组 }

for(i = 1;i < wid;i++) { //初始化二维数组 }

while(count > 1) { //循环至只有一个等价类结束

do {

x = (int)(Math.random()*wid); y = (int)(Math.random()*wid); if(i%2 == 1) { } else { }

for(j = 1;j < wid;j += 2) { }

Maze[i][j] = 1;

//1为墙

for(j = 1;j < wid;j += 2) { }

for(j = 2;j < wid;j += 2) { }

Maze[i][j] = 1;

//1为墙

Maze[i][j] = 5;

//5为格子

for(j = 0;j < wid;j++) { }

Maze[i][j] = 9;

//9为不可到达的点

}while(Maze[x][y] != 1); d = x%2; if(d == 0) {

yt1 = y; xt2 = x - 1; yt2 = y;

if(FindSet(postolist(xt1,yt1)) != FindSet(postolist(xt2,yt2))) {

Maze[x][y] = 0;

9

//墙为竖直方向的

xt1 = x + 1;

哈尔滨工业大学课程设计报告

}

}

}

}

UnionSet(postolist(xt1,yt1),postolist(xt2,yt2)); count--;

else { //墙为水平方向的 }

xt1 = x; yt1 = y + 1; xt2 = x; yt2 = y - 1;

if(FindSet(postolist(xt1,yt1)) != FindSet(postolist(xt2,yt2))) { }

Maze[x][y] = 0;

UnionSet(postolist(xt1,yt1),postolist(xt2,yt2)); count--;

int rank[] = new int[MAX]; //存储节点的层数

int parent[] = new int[MAX]; //存储相应节点的父节点 public void Init() { }

public int FindSet(int x) { }

public void UnionSet(int root1,int root2) { }

public int postolist(int x,int y) { }

10

//初始化等价类,一个格子为一个等价类

for(int i = 0;i < MAXSIZE;i++) { }

//找到二叉树的根节点

rank[i] = 0; parent[i] = i;

if(x != parent[x])

parent[x] = FindSet(parent[x]); return parent[x];

//合并等价类

int x = FindSet(root1); int y = FindSet(root2); if(x == y) return;

if(rank[x] > rank[y]) parent[y] = x; else { }

//将二维数组中(x,y)转化为一维数组对应的i

parent[x] = y;

if(rank[x] == rank[y]) ++rank[y];

return (x/2)*n + (y/2);

哈尔滨工业大学课程设计报告

3.2.2 寻找迷宫路径算法关键代码

public Stack getPath(){ //寻找迷宫路径,存储在栈中 }

11

Stack stackP = new Stack(); int x=1,y=1;

//起点坐标(1,1)

stackP.Push(1,1);

setBeen(x,y); //标记为已到达

do{

if(ableRight(x,y)){ //如果向右没有墙,则将右边格子压入栈 }

else if(ableLeft(x,y)){ }

else if(ableUp(x,y)){ //如果向上没有墙,则将上边格子压入栈 }

else if(ableDown(x,y)){ } else{ }

if(x == mazeSize - 1 && y == mazeSize -1){ //到达终点 }

else if(stackP.isEmpty()){ //未找到路径 }

stackP.Pop();

x = stackP.End().getX(); y = stackP.End().getY();

System.out.println(\); break; break; setBeen(x,y+2); y = y+2;

stackP.Push(x,y);

//如果向下没有墙,则将下边格子压入栈

setBeen(x,y-2); y = y-2;

stackP.Push(x,y); setBeen(x-2,y); x = x-2;

stackP.Push(x,y);

//如果向左没有墙,则将左边格子压入栈

setBeen(x+2,y); x = x+2;

stackP.Push(x,y);

}while(true);

return stackP;

哈尔滨工业大学课程设计报告

3.2.3 图形界面算法关键代码

public void paintComponent(Graphics g) { //画出迷宫和路径

}

super.paintComponent(g); Graphics2D g2 = (Graphics2D) g;

System.out.println(\为空?\+path.isEmpty());

Rectangle2D rect = new Rectangle2D.Double(RectleftX, RecttopY, RectWidth, g2.draw(rect); //画出迷宫边界

for(int i=1;i<=N-1;i=i+1){ //根据二维数组Maze画出迷宫 }

while(!path.isEmpty()){ }

//根据栈中内容画出路径

g2.draw(new Ellipse2D.Double(RectleftX + (path.End().getX()-1)*SIZE + path.Pop();

for(int j=1;j<=N-1;j=j+1){ }

if(isWall(Maze[i][j])){ }

if(i%2==0){ } else{ }

g2.draw(new Line2D.Double(RectleftX + SIZE*(i-1),

RecttopY +SIZE*(j),RectleftX + SIZE*(i+1), RecttopY +SIZE*(j)));

g2.draw(new Line2D.Double(RectleftX + SIZE*(i),

RecttopY +SIZE*(j-1),RectleftX + SIZE*(i),RecttopY + SIZE * (j+1)));

RectHeight);

SIZE/3 , RecttopY + (path.End().getY()-1)*SIZE + SIZE/3,2*SIZE/3, 2*SIZE/3));

3.3 主要功能界面

[按照主要功能分小节,自行增删。每个界面下需要有简短的文字说明] 3.3.1 XXX功能运行结果

主要截图及说明 3.3.2 XXX功能运行结果

主要截图及说明 3.3.3 XXX功能运行结果

主要截图及说明

12

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

哈尔滨工业大学课程设计报告 3 算法实现 3.1 开发语言及工具 开发语言:JAVA 开发工具:eclipse 3.2 算法关键代码 3.2.1 构建随机迷宫算法关键代码 public void CreateMaze(int Maze[][]) { //生成随机迷宫,存在二维数组Maze中 int x,y,i,j,d,xt1,yt1,xt2,yt2,count = n*n; Init(); //初始化等价类 for(i = 0;i < wid;i++) { //初始化二维数组 } for(i = 1;i < wid;i++) { //初始化二维数组

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com