精华内容
下载资源
问答
  • 数据结构 迷宫算法

    2018-12-20 12:49:57
    用栈来求解迷宫数据结构实验。求解迷宫的代码来自书上,迷宫只能在源代码上修改。
  • . . . #include <stdio.h> #include <stdlib.h> #include <time.h> #define M 20 #define N 20 #define visited 2 #define TRUE 1 #define FALSE 0 #define INITSIZE 100 typedef int Status; typedef struct{ //...
  • 数据结构迷宫代码

    2017-12-07 20:45:01
    首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以 三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个位置(行号和列号),d 表示走到下一 位置的方向(对于迷宫中...
  • 数据结构课程设计之C++编写的迷宫问题路径求解程序,使用的是栈方法,即将路径上每一步存在栈中,迷宫文件格式见程序提示,压缩包内已经给出了三个测试用的迷宫地图可用来测试,支持分步显示查找路径过程功能,当给...
  • 数据结构 迷宫

    2018-01-22 13:52:54
    数据库课程设计,采用C++完成,开发工具为vs2013,算法采用A*、BFS、DFS等,使用了MFC框架。
  • 数据结构迷宫求解

    2014-12-02 21:44:57
    数据结构 迷宫求解问题 数据结构课程设计源代码 txt格式
  • 数据结构迷宫问题

    2019-08-11 21:40:09
    分别用广度优先搜索和深度优先搜索实现迷宫路径的动态查找。
  • 数据结构迷宫

    2014-01-04 09:32:27
    随机生成一个迷宫图,从迷宫中找寻出路,将迷宫的左上角作入口,右下角 作出口,寻找从入口点到出口点的一条通路,并将通路信息显示出来。
  • //------------ 栈的顺序存储实现 ------------------------------typedef struct...{ int row; int col;}PosType;typedef struct...{ int step; //当前位置在路径上的"序号" PosType seat;...
  • 已运行过,可自定义迷宫 从键盘输入起点和终点,输出路径。 运用了链栈进行存储,下载即可运行 已运行过,可自定义迷宫 从键盘输入起点和终点,输出路径。 运用了链栈进行存储,下载即可运行 已运行过,可...
  • C语言数据结构迷宫问题思路:首先,迷宫如何用计算机语言表示?一般用二维数组。0表示墙,1表示路。其次,其次就是如何从迷宫中走出来了。结合堆栈,进行搜索。你可以尝试着对问题进行分层,然后逐步细化来解决。...
  • 描述: 设计一个算法找一条从迷宫入口到出口的最短路径。 输入: 迷宫的行和列m n 迷宫的布局 输出: 最短路径 输入样例: 请输入迷宫的行和列:6 8 请输入迷宫的布局: 0 1 1 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 1...
  • 本文实例为大家分享了C语言实现简单的数据结构迷宫实验,供大家参考,具体内容如下 分析:迷宫实验主要有两部分操作,其一是对迷宫的生成,其二是寻路使用栈的操作。 步骤: 一、.h文件 1、首先是迷宫的生成,可以...
  • 迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对...
  • #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #include <time.h> #define OK 1 #define ERROR 0 #define NULL 0 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define ST
  • 迷宫求解的源码 以一个 m*n 的长方阵表示迷宫,0 和 1 分别表示迷宫中的通路和障碍。设计一个程序,对任意设 定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
  • C语言数据结构迷宫求解 最近在学数据结构,然后在迷宫求解问题上,在网上搜索到的代码写的不够详细,所以打算写一下详细一点的代码,尽量包含一些完整的注释,帮助大家理解。下面贴出代码 这份代码使用的是回溯法来...

    C语言数据结构迷宫求解

    最近在学数据结构,然后在迷宫求解问题上,在网上搜索到的代码写的不够详细,所以打算写一下详细一点的代码,尽量包含一些完整的注释,帮助大家理解。下面贴出代码

    这份代码使用的是回溯法来求解,回溯法就是沿这一个方向进行探索,如果失败,则原路返回,如果可以走通,则继续往下走。

    #include <stdio.h>
    #include <stdlib.h>
    #include<malloc.h>
    typedef struct Data {
    	int x;
    	int y;
    	int k;							//这是下一步走的方向(与主函数里的move[][0]对应,move二维数组里的x位)
    
    } data;							//数据结构体,记录迷宫走的坐标
    
    typedef struct StackTop {
    	data* d;
    	int top;				//栈顶
    	int size;			//栈的大小
    
    }Stack;					//栈的结构体
    
    
    void CreateStacks(Stack **p)					//创建栈
    {
    	Stack *top = NULL;
    	top = (Stack*)malloc(sizeof(struct StackTop));
    	if (top == NULL)
    	{
    		printf("Create failed\n");
    		exit(0);
    	}
    	else
    	{
    		top->d = (data*)malloc(100 * sizeof(data));			//这个100是为了创建较大一点的线性表
    		top->top = -1;					//在寻找路径时会先进行入栈,所以初始化为-1
    		top->size = 100;				//往大的方面写,以免不够用
    	}
    	*p = top;
    
    }
    
    int IsEmpty(Stack *p)			//判断栈是否为空
    {
    	if (p->top == -1)
    	{
    		printf("NULL\n");
    		return 1;
    	}
    	else {
    		return 0;
    	}
    
    }
    
    
    void Push(Stack **p, data x)					//入栈
    {
    	data s;
    	Stack* top;
    	top = *p;
    	if (top->top == top->size - 1)				//因为top是记录数组下标的,所以是从0开始记录,而size从1开始记录
    	{
    		printf("FULL\n");
    		exit(0);
    	}
    	else
    	{
    		top->top++;							//栈顶加一
    		top->d[top->top] = x;					//入栈
    	}
    
    }
    
    void Pop(Stack **p)
    {
    	Stack* top;
    	top = *p;
    	if (IsEmpty(top))
    	{
    		exit(0);
    	}
    	else
    	{
    		top->top--;
    
    	}
    
    }
    
    data getStackTop(Stack *top)					//取栈顶首元素
    {
    	if (top->top == -1)
    	{
    		printf("NULL\n");
    
    	}
    	else
    	{
    		return top->d[top->top];
    	}
    
    }
    
    void Path(int maze[][12], int mark[][12], int x1, int y1, int x2, int y2, Stack **p, int diretction[8][2])
    {
    	Stack* top;
    	top = *p;
    	int dir;								//下一步要走的方向
    	int dir1, dir2, dir3, dir4;				//dir3与dir4为dir1,dir2两个当前坐标加上diretction数组的移动坐标得到的移动后的坐标
    	int flag = 0;
    	data s;
    	data s1;
    	s.x = x1;
    	s.y = y1;
    	s.k = -1;
    
    	mark[x1][y1] = 1;
    	Push(&top, s);
    
    	while (!IsEmpty(top))
    	{
    		s1 = getStackTop(top);
    		Pop(&top);
    		dir1 = s1.x;               //dir1为移动前坐标
    		dir2 = s1.y;				//dir2为移动前坐标
    		dir = s1.k + 1;				//拿到diretction二维数组的前一个下标,等价于方向,因为diretction只需要第一个下标变化
    		while (dir <= 7)
    		{
    
    			dir3 = dir1 + diretction[dir][0];     //dir3与dir4为dir1,dir2两个当前坐标加上diretction数组的移动坐标得到的移动后的坐标
    			dir4 = dir2 + diretction[dir][1];
    			if (maze[dir3][dir4] == 0 && mark[dir3][dir4] == 0)                  //迷宫路径为0,且当前位置没走过
    			
    			{
    				mark[dir3][dir4] = 1;								//记录走过路径
    				s1.x = dir1;										//覆盖位置
    				s1.y = dir2;
    				s1.k = dir;
    				Push(&top, s1);									//入栈
    				dir1 = dir3;									//当前位置更替为之前移动的位置
    				dir2 = dir4;
    				dir = -1;
    			}
    			if (dir3 == x2 && dir4 == y2)			//如果抵达终点,进行出栈,将路径打印出来
    			{
    				printf("The revers path is:\n");
    				while (!IsEmpty(top))
    				{
    					s = getStackTop(top);
    
    					printf("the node is :%d  %d\n", s.x, s.y);
    					Pop(&top);
    
    				}
    				flag = 1;							//标志符,将外面的循环结束
    				break;
    
    			}
    
    			dir++;
    		}
    		if (flag == 1)    //将外面的循环结束
    		{
    			break;
    		}
    	}
    }
    
    
    int main()
    {
    	Stack *p = NULL;
    	int maze[12][12] = {
    	{1,1,1,1,1,1,1,1,1,1,1,1},
    	{1,0,1,1,1,0,0,0,0,0,0,1},
    	{1,0,0,0,1,0,0,0,1,0,0,1},
    	{1,0,1,0,1,1,0,0,1,0,0,1},
    	{1,0,1,0,0,1,0,1,1,0,0,1},
    	{1,0,1,0,0,1,0,1,1,0,0,1},
    	{1,1,1,1,0,1,0,1,0,0,0,1},
    	{1,0,0,1,0,0,0,1,0,1,1,1},
    	{1,0,0,1,0,0,0,1,0,1,1,1},
    	{1,0,1,1,0,1,0,1,0,0,0,1},
    	{1,0,0,0,0,1,0,1,1,1,0,1},
    	{1,1,1,1,1,1,1,1,1,1,1,1} };	//迷宫是10*10,但是为了方便,不让节点走出迷宫范围外,选择12*12,在迷宫周围布上一层“围墙“(0是路径,1是墙)
    	int x = 1, y = 1;     //迷宫起点
    	int mark[12][12];		//这是记录路径的表,记录走过的路径
    	for (int i = 0; i < 12; i++)
    	{
    		for (int j = 0; j < 12; j++)				//因为懒得一个个输入0了,所以直接初始化了。
    		{
    			mark[i][j] = 0;
    		}
    	}
    	int move[8][2] = { {0,1} ,{1,0},{-1,0} ,{0,-1},{1,1},{1,-1},{-1,1},{-1,-1} };			//行走的方向
    	int x1 = 10, y1 = 10;				//终点
    	CreateStacks(&p);					//创建栈
    	Path(maze, mark, x, y, x1, y1, &p, move);		//寻找路径
    	return 0;
    }
    
    
    展开全文
  • 要求:(1)设计数据结构存储迷宫; (2)设计存储结构保存从入口到出口的通路: (3)设计算法完成迷宫问题的求解; (4)分析算法的时间复杂度。 实验步骤 1.实验问题分析:将迷宫定义成一个二维数组,其中...
    1. 实验目的及要求

    目的:该程序利用非递归的方法求出一条走出迷宫的路径,并将路径输出。首先随机生成合理的迷宫并以#的形式输出,再输出所走过的路径。

    要求:(1)设计数据结构存储迷宫;

           (2)设计存储结构保存从入口到出口的通路:

           (3)设计算法完成迷宫问题的求解;

           (4)分析算法的时间复杂度。

    1. 实验步骤

    1.实验问题分析:将迷宫定义成一个二维数组,其中元素0表示没有障碍,元素1表示有障碍。其中,前进的方向有四个,分别是上、下、左、右。       

    2.设计思想:以一个m×n的方阵表示迷宫,‘0’和‘1’分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论,并用‘#’输出该迷宫通路。                                                                                                                                                                                                                                                                                                                                                             

    1. 实验内容

    1.从键盘输入两个整数分别表示迷宫的长和宽,并随机生成障碍,形成一个迷宫,并将其输出。

    2.寻找输出路径。

    3.将其结果输出。

    4.实验结果

    5. 实验总结分析

    通过这次实验,我进一步增强了对于数据结构存储结构的理解。学习掌握了如何分析、计算时间复杂度等问题。同时,通过查阅资料,请教同学,分析问题,解决问题,也锻炼了我实际操作时的动手能力,也更进一步了解了数据结构的算法,收获颇多。

    展开全文
  • 数据结构实验报告 迷宫求解问题实验 上机环境 DevC++ 二程序设计相关信息 1实验题目迷宫求解问题 问题描述 实验题3.5 改进3.1.4节中的求解迷宫问题程序要求输出如图3.14所示的迷宫的所有路径并求最短路径长度及最短...
  • 迷宫--数据结构课程设计,内含两份不同的迷宫设计和两份各自的文档论文。
  • 数据结构 迷宫问题

    2012-02-27 11:58:22
    以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 (1) 根据二维数组,输出迷宫的图形。 (2) 探索迷宫的四个...
  • 数据结构迷宫求解问题论文, 用战来实现迷宫的求解问题
  • 数据结构迷宫算法

    2014-03-07 21:14:23
    学习数据结构时候编写的迷宫算法, 欢迎批评指正相互学习!
  • 数据结构迷宫实验代码及完整实验报告 数据结构实验实验三栈和队列的应用计算机科学与技术系 0901 班组 长:辛志鹏 组 员:张发辉、田飞、赵金桃日 期:2011 年 4 月 21 日实验报告2009 级 0901 班 2011 年 4 月 21 ...

    41528d3028836879cd698677c3999917.gif数据结构迷宫实验代码及完整实验报告

    数据结构实验实验三栈和队列的应用计算机科学与技术系 0901 班组 长:辛志鹏 组 员:张发辉、田飞、赵金桃日 期:2011 年 4 月 21 日实验报告2009 级 0901 班 2011 年 4 月 21 日实验类型:综合设计型 实验地点:软件实验室三 组长:辛志鹏(45) 组员:张发辉(36),赵金桃(22),田 飞 (32)一 实验题目栈和队列的应用二 需求分析本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,1. 当迷宫有完整路径可以通过时,以 0 和 1 所组成的迷宫形式输出,标记所走过的路径结束程序; 2. 当迷宫无路径时,提示输入错误结束程序。 程序执行的命令:1 创建迷宫 ;2 求解迷宫;3 输出迷宫求解;三 概要设计本程序中采用的数据模型,用到的抽象数据类型的定义,程序的主要算法流程及各模块之间的层次调用关系程序基本结构:设定栈的抽象数据类型定义:ADT Stack {数据对象:D={ | ∈CharSet,i=1,2,3,…,n,n=0;}数据关系:R={| , ∈D,i=2,…,n}设置迷宫的抽象类型ADT maze{数据对象:D={ai|ai∈‘ ’, ‘@’,‘#’,‘1’,i=1,2,…,n,n=0}数据关系:R={r,c}r={|ai-1,ai∈D, i=1,2,…,n,}c=|ai-1,ai∈D, i=1,2,…,n,}结构体定义:typedef struct //迷宫中 x 行 y 列的位置{ int x;int y;}PosType;typedef struct //栈类型{ int ord; //通道块在路径上的“序号”PosType seat; //通道块在迷宫中的“坐标位置”int di; //从此通道块走向下一通道块的“方向”}MazeType;typedef struct{ MazeType *base;MazeType *top;int stacksize;}MazeStack;基本函数:Status InitStack(MazeStack if(!S.base)exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}\\20091001452)出栈操作Status Pop(MazeStack e = *--S.top;return OK;}\\20091001453)判断栈是否为空Status StackEmpty(MazeStack return ERROR;}\\20091001454)迷宫路径求解Status MazePath(PosType start, PosType end)//迷宫路径求解{PosType curpos;MazeStack S;MazeType e;int curstep;InitStack(S);curpos = start; //设定当前位置为入口位置curstep = 1; //探索第一步cout ’。六 使用说明首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,1、 当迷宫有完整路径可以通过时,以 0 和 1 所组成的迷宫形式输出,标记所走过的路径结束程序; 2、 当迷宫无路径时,提示输入错误结束程序。 程序执行的命令:1 创建迷宫 ;2 求解迷宫;3 输出迷宫求解;七 测试结果八 实验总结1. 本次实验利用了关于栈的相关知识,入栈、出栈、判断栈满、增加存储空间等等,使学习到的知识能够很好的结合利用,在实际的操作中加强熟练程度。 2. 对于没有掌握好的知识,应该及时的参考课本或者网络资源,使知识落实到实处,不留空白。 3. 关于迷宫中行走方向的选择这一块需要重点的练习,函数的运用不够灵活。 九 模块分工2009100145 辛志鹏 入栈、出栈和判断栈是否为空2009100136 张发辉 迷宫路径求解 2009100122 赵金桃 调用函数 2009100132 田 飞 探索下一位置、标记走过和作废的路径附完整代码:#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef struct//迷宫中 x 行 y 列的位置{int x;int y;}PosType;typedef struct//栈类型{int ord; //通道块在路径上的“序号”PosType seat; //通道块在迷宫中的“坐标位置”int di; //从此通道块走向下一通道块的“方向”, //1:东 2:北 3:西 (顺时针)}MazeType;typedef struct{MazeType *base;MazeType *top;int stacksize;}MazeStack;#include using namespace std;Status InitStack(MazeStack Status Push(MazeStack Status Pop(MazeStack Status StackEmpty(MazeStack Status MazePath(PosType start, PosType end);Status Pass(PosType void FootPrint(PosType pos);PosType NextPos(PosType curPos, int void MakePrint(PosType pos);//迷宫地图,0 表示墙壁,1 表示通路, 入口:mazeMap[1][1], 出口 mazeMap[8][8]int mazeMap[10][10] ={ //0,1,2,3,4,5,6,7,8,9{0,0,0,0,0,0,0,0,0,0}, //0{0,1,1,0,1,1,1,0,1,0}, //1{0,1,1,0,1,1,1,0,1,0}, //2{0,1,1,1,1,0,0,1,1,0}, //3{0,1,0,0,0,1,1,1,1,0}, //4{0,1,1,1,0,1,1,1,1,0}, //5{0,1,0,1,1,1,0,1,1,0}, //6{0,1,0,0,0,1,0,0,1,0}, //7{0,0,1,1,1,1,1,1,1,0}, //8{0,0,0,0,0,0,0,0,0,0} //9};int main(){PosType mazeStart, mazeEnd;mazeStart.x = 1;//开始与结束点mazeStart.y = 1;mazeEnd.x = 8;mazeEnd.y = 8;cout = S.stacksize){S.base = (MazeType

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,188
精华内容 6,475
关键字:

数据结构迷宫

数据结构 订阅
友情链接: ColorText100.rar