简单迷宫,字符化输出
简单迷宫,字符化输出
效果图
#include <stdio.h>
#include <stdlib.h>
#define M 8
#define N 8
#define TRUE 1
#define FALSE 0typedef int bool;
typedef struct{ // 方位数据结构int incX, incY;
} Direction;typedef struct{int x, y; // 当前位置坐标int di; // 当前方位
} Box, ElemType; // 栈中元素typedef struct StackNode{ // 栈ElemType data;struct StackNode *next;
} StackNode, *LinkStack;
bool Push(LinkStack S, ElemType e){LinkStack p=(LinkStack)malloc(sizeof(StackNode));p->data=e;p->next=S->next;S->next=p;return 1;
}
bool Pop(LinkStack S, ElemType *e){if(S==NULL) return -1;*e=S->next->data;LinkStack p=S->next;S->next=S->next->next;free(p);return 1;
}void Traverse(LinkStack S, int graph[M+2][N+2]){int x, y;ElemType p; while(S->next!=NULL){Pop(S, &p); graph[p.x][p.y]=-2; // 标记路径}for(x=0; x<M+2; x++){ // 字符输出for(y=0; y<N+2; y++){if(graph[x][y]==-2)printf("%2c", 'O');else if(graph[x][y]==1)printf("%2c", '-');else printf("%2c", ' ');}printf("\n");}
}bool findPath(int maze[M+2][N+2], Direction direct[], LinkStack S){Box temp;int x, y, di; // 迷宫格子当前处理单元的横纵坐标和方向int line, col; // 迷宫数组下一单元的行坐标和列坐标maze[1][1]=-1;temp.x=1; temp.y=1; temp.di=-1;Push(S, temp);while(S->next!=NULL){Pop(S, &temp);x=temp.x; y=temp.y; di=temp.di+1;while(di<4){ // 方向未尝试完// printf("%d %d %d\n", x, y, di);line=x+direct[di].incX;col=y+direct[di].incY;if(maze[line][col]==0){temp.x=x; temp.y=y; temp.di=di;Push(S, temp);x=line; y=col; maze[line][col]=-1;if(x==M&&y==N) return TRUE; // 发现出口 else di=0;}else di++;}}return FALSE;
}int main(){int maze[M+2][N+2] = { // 1-障碍{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },{ 1, 0, 0, 1, 0, 0, 0, 1, 0, 1 },{ 1, 0, 0, 1, 0, 0, 0, 1, 0, 1 },{ 1, 0, 0, 0, 0, 1, 1, 0, 0, 1 },{ 1, 0, 1, 1, 1, 0, 0, 0, 0, 1 },{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },{ 1, 0, 1, 0, 0, 0, 1, 0, 0, 1 },{ 1, 0, 1, 1, 1, 0, 1, 1, 0, 1 },{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 },{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }};Direction direct[4] = { // 四个方向{ 0, 1 }, // right{ 1, 0 }, // down{ 0,-1 }, // left{ -1, 0 } // up};LinkStack S=(LinkStack)malloc(sizeof(StackNode));S->next=NULL;int rst=findPath(maze, direct, S); // 寻径Traverse(S, maze);free(S);return 0;
}
参照:B栈懒猫老师
https://www.bilibili.com/video/BV1oE41177wk
简单迷宫,字符化输出相关推荐
- JAVA中BigDecimal的字符化输出
BigDecimal是处理高精度的浮点数运算的常用的一个类 当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到预想之外的科学技术法表示的问题. 一般直接使用 ...
- Java学习之编写实现简单加密的程序,要求从键盘输入一个字符,输出加密后的字符。
案例介绍: 编写实现简单加密的程序,要求从键盘输入一个字符,输出加密后的字符. 加密规则:输入A,输出Z;输入B,输出Y:输入a,输出z;输入b,输出y. 案例代码: import java.io.* ...
- 20行Python代码实现视频字符化
来源 | ZackSock(ID:ZackSock) 我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来. 看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触 ...
- Python20行代码实现视频字符化
Python20行代码实现视频字符化 我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来.看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触opencv模块, ...
- opencv画框返回坐标 python_20行Python代码实现视频字符化
来源 | ZackSock(ID:ZackSock) 我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来. 看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触 ...
- 视频灰度处理python_20行Python代码实现视频字符化
来源 |ZackSock(ID:ZackSock) 我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来. 看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触o ...
- python 字符视频_Python20行代码实现视频字符化
Python20行代码实现视频字符化 我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来.看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触opencv模块, ...
- python 制作字符视频_20行Python代码实现视频字符化功能
我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来.看起来是非常高端,但是实际实现起来确是非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化.但是在此之前 ...
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
最新文章
- 关键路径最早最迟开始时间
- [C# 网络编程系列]专题四:自定义Web浏览器
- 《JavaScript 闯关记》之函数
- InputFormat和OutPutFormat
- thinkPHP的Excel插件
- 根据on,获取选中的元素
- mysql语句中多表查询_6.MySql中的SQL语句(五):多表查询
- sql替换字符串中的部分字符
- firebug下载时出现there was an error loading firebug
- 详解安全测试工具:SAST、DAST、IAST、SCA的异同
- 2021年 阿里云商标注册申请的相关详情及分类介绍
- MPU6050初始化失败原因及常见问题解决方法
- 让Ipad买前爱奇艺买后生产力——浏览器编程之Projector运行Idea(超详细)
- Ubuntu20.04 添加打印机
- 转李承鹏的《恰恰》,这次一定要顶他
- switch()函数 ----by xhxh
- MATLAB算法实战应用案例精讲-【图像处理】小目标检测(补充篇)(附python代码实现)
- python入门ppt下载_Python3入门ppt
- 小学生python游戏编程arcade----excel调用
- java为什么有基本类型_你了解Java数据类型吗?