c语言迷宫问题输出坐标,c语言栈解决迷宫问题
发布日期:2021-10-23 03:55:37 浏览次数:10 分类:技术文章

本文共 2021 字,大约阅读时间需要 6 分钟。

/**

* 下面是用穷举法来走迷宫

* 走迷宫的规则:当前坐标是(i,j)下一步可以往四个方向行走,上下左右

*

* 在迷宫数组 0标识可以走,1标识不能走 2 标识已经走过 3标识回退的路

*

*

*

* 穷举法走出迷宫有两种方法:

* 1 栈

* 2 递归

*

*

*

*

*

*/

#include

#include

struct stack{

int x;

int y;

struct stack *next;

};

typedef struct stack stack_link;

typedef stack_link *plink;

/**

* 入栈

*/

plink push(plink s,int x, int y)

{

plink new_node;

new_node = (plink)malloc(sizeof(stack_link));

if(!new_node){

printf("内存已满");

exit(-1);

}

new_node->x = x;

new_node->y = y;

s->next = new_node;

s = new_node;

return s;

}

/**

* 出栈

*/

plink pop(plink s,int *x,int *y)

{

plink top;

//队列不为空

if(s != NULL){

top = s;

s = s->next;

*x = s->x;

*y = s->y;

free(top);

}else{

*x = -1;

}

return s;

}

/**

* 用栈的回溯控制实现迷宫

*

* 如果没有到出口,探索如下四个方位

* (x-1,y)且 x,y>0

* (x+1,y)且 x,y>0

* (x,y-1)且 x,y>0

* (x,y+1)且 x,y>0

*

* {1,1,1,1,1,1,1,1,1,1},

{1,0,0,0,0,0,0,1,1,1},

{1,0,1,1,1,1,1,0,0,1},

{1,0,1,0,0,0,0,0,0,1},

{1,0,0,0,1,0,1,1,1,1},

{1,1,1,1,0,0,1,1,1,1},

{1,0,0,0,0,1,1,1,1,1},

{1,0,1,1,0,0,1,1,1,1},

{1,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1}

*

*/

void stack_maze(int a[][10],plink s,int x,int y)

{

int i,j;

//把出口设定为(1,1)

while(x > 1 || y > 1){

a[x][y] = 2;

//这条路可行

if(a[x-1][y] <= 0){

x = x-1;

s = push(s,x,y);

}else if(a[x+1][y] <= 0){

x = x+1;

s = push(s,x,y);

}else if(a[x][y-1] <= 0){

y = y-1;

s = push(s,x,y);

}else if(a[x][y+1] <= 0){

y = y+1;

s = push(s,x,y);

}else{

a[x][y] = 3;

s = pop(s,&x,&y);

}

}

//标记最后一点

a[x][y] = 2;

for(i=0;i<10;i++)

{

for(j=0;j<10;j++){

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

}

printf("\\n");

}

}

//main方法

void main()

{

int i,j;

//用于回溯的栈

plink s;

//设置迷宫,最外围1为墙 里边0为可走路径 1为障碍

int migong[10][10] =

{

{1,1,1,1,1,1,1,1,1,1},

{1,0,0,0,0,0,0,1,1,1},

{1,0,1,1,1,1,1,0,0,1},

{1,0,1,0,0,0,0,0,0,1},

{1,0,0,0,1,0,1,1,1,1},

{1,1,1,1,0,0,1,1,1,1},

{1,0,0,0,0,1,1,1,1,1},

{1,0,1,1,0,0,1,1,1,1},

{1,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1}

};

printf("before walk on the maze:\\n");

for(i=0;i<10;i++)

{

for(j=0;j<10;j++){

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

}

printf("\\n");

}

printf("\\n");

printf("we start walk on the maze\\n");

stack_maze(migong,s,8,8);

}

转载地址:https://blog.csdn.net/weixin_30496999/article/details/117009602 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c语言程序断点怎么打,C#中如何使用断点操作调试程序
下一篇:asus t100ha linux,华硕变形本怎么样 | 华硕变形本T100HA 好不好_什么值得买

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月22日 14时17分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

在php脚本中 通过可以获取,在PHP中,可以使用Unix时间戳获取精确的脚本执行时间。... 2019-04-21
s2-045 php exp,S2-045-EXP.py --Struts2任意代码执行漏洞 (S2-045,CVE-2017-5638) 2019-04-21
linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。... 2019-04-21
c语言程序设计 科学出版社习题答案,C语言程序设计(科学出版社)第4章 课后习题参考答案.doc... 2019-04-21
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错... 2019-04-21
deepin linux 2014安装,2014.2版本的Deepin虚拟机安装浅谈(就是深度Linux) 2021-06-24
android 限速工具,Android下载器之限速篇 2021-06-24
html刷新ajax实现原理,AJAX的原理—如何做到异步和局部刷新 2021-06-24
html中列表菜单加文字请选择,html中下拉菜单 2019-04-21
读书郎平板中android,读书郎学生平板电脑怎么用 使用方法详解【图文】 2019-04-21
html5 调用摄像头 支持IE,JS调用本地摄像头拍照(兼容各大浏览器及IE8+) 2019-04-21
rust和gta5哪个吃配置_盘点4款Steam“自由度”很高的游戏,GTA5众所周知,目前最热门... 2019-04-21
es审计日志_elasticsearch 事务日志translog 2019-04-21
dw1510_超低温种子储存柜 2019-04-21
文件未找到mathpage.wll_解决MathPage.wll文件找不到的问题(找了好久的良心之作)... 2019-04-21
广州刷脸支付骗局_刷脸支付是骗局?那可能你还不了解刷脸支付 2019-04-21
java 远程调试 端口_JAVA远程调试 2019-04-21
java 使用或覆盖了已过时的api_JAVA使用或覆盖了已过时的 API 2019-04-21
java 图片旋转保存_Java 对图片90度旋转 2019-04-21
用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)... 2019-04-21