数据结构课程设计-迷宫求解
更新时间:2024-07-10 07:42:01 阅读量: 综合文库 文档下载
数据结构课程设计
迷宫求解
学院:湖北工业大学计算机学院
教师:沈华老师
班级:12网络工程1班
学号:1210322118
姓名:饶进阳
时间:2013年12月22日
目 录
问题描述 ......................................................... 2
思路解析 .........................................................
程序流程 .........................................................
核心代码 .........................................................
源程序代码 ........................................................
程序运行实例 .....................................................
课设总结 .........................................................
3 4 5 6 12 14
1
迷宫求解
问题描述:
可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出; 要求:
在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
比如这是一个迷宫
电脑找出的出路
2
思 路
设定当前位置的初值为入口位置: do{
若当前位置可通, 则{
将当前位置插入栈顶;} 若该位置是出口位置,则结束;
否则切换当前位置的东邻块为新的当前位置; 否则{
若栈不空且栈顶位置还有其他方向未被探索, 则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块;} 若{
栈不空但栈顶位置的四周均不可通, 则删去栈顶位置;} 若{
栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空;} }while(栈不空)
{栈空说明没有路径存在}
PS:类似动态求解方法 3
程序流程
第一次用visio做程序框图,所以只把程序的大概流程画出来了。
4
核心代码
//栈相关操作 int initlStack(Stack *S)
int pushStack(Stack S, coordinate e) int popStack(Stack S, coordinate *e) int getTop(Stack S, coordinate *e) void show(Stack S)
//创建一个迷宫 int creatMaze(Maze *m)
//打印出一个迷宫 void showMaze(Maze *m)
//求当前结点的下一个通路
coordinate passNext(Maze *m, int i, int j) //求迷宫路径
int solveMaze(Maze *m, Stack S) //模拟出路径
void showRoad(Maze m, Stack S) 5
程序源码:
#include
#define MAX 100
#define SIZE sizeof(Node)
//**************************** //栈
typedef struct { int x;//行 int y;//列 }coordinate;//坐标
typedef struct node{ coordinate data; struct node *next; }Node, *Stack;
//栈的相关操作
//栈初始化
//带头结点的链栈
int initlStack(Stack *S) { (*S) = (Node *)malloc(SIZE); if((*S) == NULL) { return 1; } (*S)->next = NULL; return 0; }
//入栈
int pushStack(Stack S, coordinate e) { Node *p; p = (Node *)malloc(SIZE); p->data.x = e.x; p->data.y = e.y; p->next = S->next; S->next = p; return 0;
}
//出栈
int popStack(Stack S, coordinate *e) { Node *p; if(S->next == NULL) { printf(\ return 2; } e->x = S->next->data.x; e->y = S->next->data.y; p = S->next; S->next = p->next; free(p); return 0; }
//读取栈顶
int getTop(Stack S, coordinate *e) { e->x = S->next->data.x; e->y = S->next->data.y; return 0; }
//显示
void show(Stack S) { Node *p; p = S->next; while(p != NULL) { printf(\ p = p->next; } printf(\}
//***************************
//*************************** //迷宫
typedef struct { int row; int col; int arr[MAX][MAX]; }Maze;
//创建一个迷宫
int creatMaze(Maze *m) { int i, j; printf(\ scanf(\ printf(\ for(i = 0; i <= MAX - 1; i++) { for(j = 0; j <= MAX - 1; j++) { m->arr[i][j] = 1; } } for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { scanf(\ } } return 0; }
//显示迷宫信息
void showMaze(Maze *m) { int i, j; printf(\ for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { printf(\ } printf(\ } printf(\ for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { if(m->arr[i][j] != 0) { printf(\■ \ } else { printf(\□ \ } } printf(\ } }
//求当前结点的下个通路 //顺时针找
coordinate passNext(Maze *m, int i, int j) { coordinate k; if(m->arr[i][j+1] == 0) {//东 k.x = i; k.y = j+1; return k; } if(m->arr[i+1][j] == 0) {//南 k.x = i+1; k.y = j; return k; } if(m->arr[i][j-1] == 0) {//西 k.x = i; k.y = j-1; return k; } if(m->arr[i-1][j] == 0) {//北 k.x = i-1; k.y = j; return k; } else {//不存在 k.x = -1; k.y = -1; return k; } }
//求解迷宫
int solveMaze(Maze *m, Stack S) { int i, j; int boolean; coordinate a; i = 1; j = 1; do { if(m->arr[i][j] == 0) { a.x = i; a.y = j; m->arr[i][j] = 2; pushStack(S, a);
正在阅读:
数据结构课程设计-迷宫求解07-10
转正申请书范文30篇07-31
6.房地产市场细分与定位05-16
我国上市公司资本结构优化研究06-23
应届毕业生培养计划方案03-07
友联PXUT-350+操作手册03-28
仿制药生物等效性试验指导原则(日本)03-03
2022年度学校党建工作总结07-31
计算题04-04
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数据结构
- 求解
- 迷宫
- 课程
- 设计
- 采煤工作面推溜安全技术措施
- 2012年监理工程师相关法规真题详细解析
- 2016年初一语文24《梦溪笔谈》二则练习题及答案
- 《幼儿节日主题体验课程》模块一讨论解析
- 中考生物复习资料 - 七年级生物上册期末考试复习提纲
- 中国三氯生行业市场前景分析预测报告(目录) - 图文
- 2014—2015学年度第二学期期中考试试卷初一数学附答案
- 管理会计教案
- 社会工作实务的考题库
- 2016年无针注射器发展现状及市场前景分析 (目录)
- 制氧机慢性阻塞性肺疾病患者长期家庭氧疗疗效分析
- 2016届毕业设计(论文)文稿模板
- PPT插入视频的三种方法及其它技巧
- 快乐其实很简单
- 2017年新北师大版五年级数学上册总复习-知识点整理
- 成功率相当高的抄底选股指标通达信指标公式源码
- 【毕业论文】酒店人才流失的原因与对策分析
- 浅谈小学语文阅读教学中的师生对话
- 执业医师内科学经典考题中西医结合执业医师内科学模拟试题四(含
- Doe-2无法计算解决方案