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

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

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

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

#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

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”