[回溯法] 大一课设-走迷宫-输出所有可能的路径(可修改每步时间,加以理解整个过程)

本文主要是介绍[回溯法] 大一课设-走迷宫-输出所有可能的路径(可修改每步时间,加以理解整个过程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大一时写的课设,今天翻到,在此保存。
若有帮到您最好,不足之处请多多包涵,欢迎指正错误。

【运行】
在这里插入图片描述
【最终结果】
在这里插入图片描述
【代码】

#include<stdio.h>
#include <stdlib.h>
#include<windows.h>// 可修改的参数
#define SLEEP_TIME 300 //每次的休息时间(单位毫秒),方便看递归过程,便于理解,设置成0直接看最后答案
#define N 10
#define MAN 5
#define WALL 1
#define EMPTY 0
int map[N][N] = { //地图{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, 1, 1, 1, 0, 1},{1, 1, 0, 0, 0, 0, 0, 0, 0, 1},{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};// 方向
int dirs[4][2] = {{0, 1}, //右{1, 0}, //下{0, -1}, //左{-1, 0}	//上
};
int cnt=0; //当前路径数// UI
void gotoxy(int x, int y);
void Update();// 核心
void dfs(int si, int sj, int ei, int ej) { //开始的坐标si,sj;结束的坐标ei,ejint i;if (si<0 || si>=N || sj<0 || sj>=N) return ;if (map[si][sj]!=EMPTY) return ; //不是空路,退出map[si][sj] = MAN; //走到这一格printf("i=%d j=%d", si, sj);Update();if (si==ei && sj==ej) { //到达终点++cnt; //策略+1printf("\n");} else {// 4个方向继续走	for (i=0; i<4; ++i) {dfs(si+dirs[i][0], sj+dirs[i][1], ei, ej);}}map[si][sj] = EMPTY; //退出这一格Update();
}int main() {char tmp;printf("按任意键继续\n");scanf("%c", &tmp);Update();dfs(1, 1, 8, 8);printf("结束:一共有%d个方案\n", cnt);return 0;
}// 光标移动函数
void gotoxy(int x, int y) {COORD pos;pos.X = x; pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}// 更新屏幕
void Update() {int i, j;gotoxy(0, cnt*(N+2));Sleep(SLEEP_TIME);printf("---------- 方案%d ----------\n", cnt+1);for (i=0; i<N; ++i) {for (j=0; j<N; ++j) {if (map[i][j]==WALL) printf("*");else if (map[i][j]==EMPTY) printf(" ");else if (map[i][j]==MAN) printf("%c", 12);}printf("\n");}
}

这篇关于[回溯法] 大一课设-走迷宫-输出所有可能的路径(可修改每步时间,加以理解整个过程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705473

相关文章

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu