c 实现走迷宫流程图_c语言迷宫问题程序功能介绍.设计思路.数据结构设计及用法说明程序结构(流程图).各模块的功能及程序说明....

满意答案

qiniy808451

2014.01.06

采纳率:40%    等级:13

已帮助:8084人

原来也做过,以下是写的源代码,里面有部分注释,应该能看懂,可以运行。总结的话,把代码写进去,再随便弄几句心得说几句好好学C应该就OK了吧

#include

#include

#define M 15

#define N 15

struct mark //定义迷宫内点的坐标类型

{

int x;

int y;

};

struct Element //"恋"栈元素,嘿嘿。。

{

int x,y; //x行,y列

int d; //d下一步的方向

};

typedef struct LStack //链栈

{

Element elem;

struct LStack *next;

}*PLStack;

/*************栈函数****************/

int InitStack(PLStack &S)//构造空栈

{

S=NULL;

return 1;

}

int StackEmpty(PLStack S)//判断栈是否为空

{

if(S==NULL)

return 1;

else

return 0;

}

int Push(PLStack &S, Element e)//压入新数据元素

{

PLStack p;

p=(PLStack)malloc(sizeof(LStack));

p->elem=e;

p->next=S;

S=p;

return 1;

}

int Pop(PLStack &S,Element &e) //栈顶元素出栈

{

PLStack p;

if(!StackEmpty(S))

{

e=S->elem;

p=S;

S=S->next;

free(p);

return 1;

}

else

return 0;

}

/***************求迷宫路径函数***********************/

void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])

{

int i,j,d;int a,b;

Element elem,e;

PLStack S1, S2;

InitStack(S1);

InitStack(S2);

maze[start.x][start.y]=2; //入口点作上标记

elem.x=start.x;

elem.y=start.y;

elem.d=-1; //开始为-1

Push(S1,elem);

while(!StackEmpty(S1)) //栈不为空 有路径可走

{

Pop(S1,elem);

i=elem.x;

j=elem.y;

d=elem.d+1; //下一个方向

while(d<4) //试探东南西北各个方向

{

a=i+diradd[d][0];

b=j+diradd[d][1];

if(a==end.x && b==end.y && maze[a][b]==0) //如果到了出口

{

elem.x=i;

elem.y=j;

elem.d=d;

Push(S1,elem);

elem.x=a;

elem.y=b;

elem.d=886; //方向输出为-1 判断是否到了出口

Push(S1,elem);

printf("\n0=东 1=南 2=西 3=北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n");

while(S1) //逆置序列 并输出迷宫路径序列

{

Pop(S1,e);

Push(S2,e);

}

while(S2)

{

Pop(S2,e);

printf("-->(%d,%d,%d)",e.x,e.y,e.d);

}

return; //跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴o(∩_∩)o...

}

if(maze[a][b]==0) //找到可以前进的非出口的点

{

maze[a][b]=2; //标记走过此点

elem.x=i;

elem.y=j;

elem.d=d;

Push(S1,elem); //当前位置入栈

i=a; //下一点转化为当前点

j=b;

d=-1;

}

d++;

}

}

printf("没有找到可以走出此迷宫的路径\n");

}

/*************建立迷宫*******************/

void initmaze(int maze[M][N])

{

int i,j;

int m,n; //迷宫行,列

printf("请输入迷宫的行数 m=");

scanf("%d",&m);

printf("请输入迷宫的列数 n=");

scanf("%d",&n);

printf("\n请输入迷宫的各行各列:\n用空格隔开,0代表路,1代表墙\n",m,n);

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

scanf("%d",&maze[i][j]);

printf("你建立的迷宫为o(∩_∩)o...\n");

for(i=0;i<=m+1;i++) //加一圈围墙

{

maze[i][0]=1;

maze[i][n+1]=1;

}

for(j=0;j<=n+1;j++)

{

maze[0][j]=1;

maze[m+1][j]=1;

}

for(i=0;i<=m+1;i++) //输出迷宫

{

for(j=0;j<=n+1;j++)

printf("%d ",maze[i][j]);

printf("\n");

}

}

void main()

{

int sto[M][N];

struct mark start,end; //start,end入口和出口的坐标

int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次为东西南北

initmaze(sto);//建立迷宫

printf("输入入口的横坐标,纵坐标[逗号隔开]\n");

scanf("%d,%d",&start.x,&start.y);

printf("输入出口的横坐标,纵坐标[逗号隔开]\n");

scanf("%d,%d",&end.x,&end.y);

MazePath(start,end,sto,add); //find path

system("PAUSE");

}

00分享举报

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python连接数据库mysql错误1045、手动登录可以_登录mysql错误1045解决方法

在命令提示符中登陆mysql时&#xff0c;提示1045报错解决方案&#xff1a; 安装好mysql&#xff0c;在cmd中输入mysql -uroot -p回车&#xff0c;输入密码后&#xff0c;出现1045错误&#xff0c;错误提示如下&#xff1a; ERROR 1045(28000): Access denied for user rootloca…

ipython文件每次打开重新运行吗_iPython中的多处理:当我不打开任何文件时打开的文件太多?...

我有一个IPython笔记本&#xff0c;我是多线程运行&#xff0c;并已改为尝试在多个处理器上运行。除非有人认为引用大量的代码是没有帮助的。它的要点是&#xff0c;我试图围绕PyOpenCL包装一个负载平衡器&#xff0c;因此我需要为多个独立的队列提供数据——一部分是为了解决特…

host 端口_如何让多端口网站用一个nginx进行反向代理实际场景分析

前段时间公司要整合服务器资源&#xff0c;刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合&#xff0c;断断续续一个月迁移完成大概优化掉了1/3的机器&#xff0c;完成之后遇到了一些问题&#xff0c;比如曾今零零散散部署在生产上一些可视化UI&#xff1a;apollo&…

安装python37路径报错_解决pycharm安装python库报错问题

最近在玩微信图灵机器人&#xff0c;不过我安装有一些库&#xff0c;安装报错&#xff0c;上网找了很久&#xff0c;总结有两种方法&#xff0c;记录一下方法一&#xff1a;手动安装&#xff0c;直接到官网你需要的python库下载到本地&#xff0c;放在安装python路径&#xff0…

sqldeveloper导出数据字典_如何全面建设B端产品中的数据迁移方案

加关注&#xff0c;带你看世界在新系统替换老系统或者系统升级的项目中&#xff0c;难免会存在数据迁移的工作&#xff0c;并且随着业务系统和数据结构的复杂性&#xff0c;数据迁移的难度越大。这亦要求在项目实施的前期&#xff0c;根据客户的需求尽可能全面地考虑到各个方面…

声明对象_静态变量(使用同一个类声明的对象可以共享一个值)

要在属于同一种类的对象之间共享数据值&#xff0c;可以使用static。namespace demo3{ class point //定义点 { public int x; public int y; } class line { static public point origin new point(); public point ending ne…

centos6配置mysql远程访问_MariaDB 数据库配置 Navicat 程序远程访问权限

如果MySQL数据库采用的是 MariaDB 引擎&#xff0c;与普通的数据库配置有点不同 MariaDB 与普通的MySQL数据库的一个不同在于它的配置文件不止一个&#xff0c;它将不同的数据放入到不同的配置文件中&#xff0c;之前的/etc/mysql/my.cnf内容如下&#xff1a;从文件中的注释上来…

java读取mysql配置文件_Linux运维:MySQL读写分离解决方案

一次性付费进群&#xff0c;长期免费索取教程&#xff0c;没有付费教程。进微信群回复公众号&#xff1a;微信群&#xff1b;QQ群&#xff1a;460500587教程列表 见微信公众号底部菜单 | 本文底部有推荐书籍 微信公众号&#xff1a;计算机与网络安全ID&#xff1a;Computer-net…

的硬件报错_工程师经验:78%的硬件失效罪魁祸首 —— 焊接问题

工程师经验你是否长时间纠缠于线路板的失效分析&#xff1f;你是否花费大量精力在样板调试过程中&#xff1f;你是否怀疑过自己的原本正确的设计&#xff1f;也许许多硬件工程师都有过类似的心理对话。有数据显示&#xff0c;78%的硬件失效原因是由于不良的焊接和错误的物料贴片…

柔性体没有应变_灌注式半柔性道面材料抗冲击性能试验研究

文章来源&#xff1a;微信公众号"沥青路面”前言灌注式半柔性道面材料是一种刚度大于沥青混凝土&#xff0c;小于水泥混凝土的复合道面材料&#xff0c;在兼具了两种材料优势的同时避开了它们的缺陷。半柔性道面不存在裂缝&#xff0c;而且受温度影响远远小于沥青道面&…

html网页上传到服务器_JSP+Servlet实现文件上传到服务器功能

本文实例为大家分享了JSPServlet实现文件上传到服务器功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下项目目录结构大致如下&#xff1a;正如我在上图红线画的三个东西&#xff1a;Dao、service、servlet 这三层是主要的结构&#xff0c;类似 MVC 架构&#xff…

gaf处理一维故障信号_【推荐文章】改进局部均值分解的齿轮箱复合故障特征提取...

《机械传动》2019年 第43卷 第8期文章编号&#xff1a;1004-2539(2019)08-0130-05DOI&#xff1a;10.16578/j.issn.1004.2539.2019.08.024引用格式&#xff1a;柴慧理, 叶美桃. 改进局部均值分解的齿轮箱复合故障特征提取[J]. 机械传动, 2019&#xff0c;43(8):130-134.CHAI…

dll模块化设计与编程_FPGA设计原则经验分享

一、面积和速度如何折中 面积和速度是芯片设计中一对相互制约、影响成本和性能的指标&#xff0c;贯穿FPGA设计的始终。在FPGA设计中&#xff0c;面积是指一个设计消耗的FPGA内部逻辑资源的数量&#xff0c;可以用消耗的触发器和查找表的个数或者是等效逻辑门数来衡量&#x…

div背景透明_为什么css3实现background-image和半透明边框这么麻烦

”background和border属性能有什么难的&#xff1f;"我经常听到新手觉得css的background和border属性简单。那好&#xff0c;我们来看下面这个比较“简单”的需求&#xff1a;父元素有一张背景&#xff0c;子元素有边框&#xff0c;且子元素有一张背景颜色。这时候子元素的…

ntr模式_ntr什么意思?

NTR全称New Type destroyeR system&#xff0c;即新人类毁灭系统&#xff0c;为《高达UC》中「UC」计划核心的RX-0系列机体所搭载的特殊OS系统。该系统可以对敌性精神感应MS所散发出的感应波进行探知&#xff0c;从而激发机体的形态变化&#xff0c;进入「毁灭模式」&#xff0…

python hashlib_python hashlib模块及md5() 、sha()

hashlib模块是python2.5 以后出现的一个包&#xff0c;其主要涉及安全和加密。而且hashlib 得到openssl 的“支持” &#xff0c;其支持openssl 库提供的所有算法&#xff0c;具体包括md5、sha1、sha224、sha256、sha512等。详细用法&#xff0c;可以通过pydoc hashlib 查看&am…

c mysql 查询超时设置_MySQL查询超时的设置方法

欢迎进入Linux社区论坛&#xff0c;与200万技术人员互动交流 >>进入 这里顺带解释一下什么是non-interactive connection Non-Interactive Commands Just do a quick look up on a table without logging into the client, running the query then logging back out aga欢…

python聚类分析案例_深度解读|如何构建用户分级体系实现精细化运营?附案例实操...

本文内容较长&#xff0c;代码全部已展示在文中用户精细化分类也可以称做用户画像&#xff0c;是目前很常见的一种运营手段&#xff0c;目的是为了更好的服务不同性质的客户&#xff0c;提高每个环节的转化率&#xff0c;最大程度挖掘客户价值&#xff0c;创造利润。那么如何构…

mysql 查询语句 过滤_MySQL全面瓦解7:查询的过滤条件

概述在实际的业务场景应用中&#xff0c;我们经常要根据业务条件获取并筛选出我们的目标数据。这个过程我们称之为数据查询的过滤。而过滤过程使用的各种条件(比如日期时间、用户、状态)是我们获取精准数据的必要步骤&#xff0c;这样才能得到我们期望的结果。所以本章我们来学…

单片机集成wifi等_从零制作单片机需要哪些知识?

请点击上面 免费关注...说一下从芯片制作开始到最后编写驱动程序整个过程中每一步所需要的知识。作者&#xff1a;彭谟威链接&#xff1a;https://www.zhihu.com/question/28580074/answer/93515413来来来&#xff0c;让我们一起&#xff0c;左手右手一个慢动作。每一个方向都值…