c语言10迷宫,C语言实现走迷宫
本文实例为大家分享了C语言实现走迷宫的具体代码,供大家参考,具体内容如下
描述
给一张个迷宫,问能否从起点走到终点,只能往上下左右走,不能斜着走
输入
多组测试数据,每组第一行两个正整数,分别为n和m
表示n这个迷宫有n行m列(0
接着是n行m列,
"#"表示路
‘*"表示墙
‘S"表示起点
‘T"表示终点
输出
每组测试数据输出一个结果,如果能从S走到T,输出“YES”,否则输出“NO”
输入样例:
2 2
S*
#T
3 3
S*#
#T
##
输出样例:
YES
NO
有两种方法可以解决这个问题
第一种深度优先搜索:站在入口,考虑自己下一步可以走哪里,走到下一个位置后,再考虑下一步怎么走,一直走下去,直到没有路,然后再返回最近的一个岔路口,选其它任一条没试过的路,如果不能走,再尝试其他的路,直到这个岔路口的路全部试完,再回到上一个路口,看是否能走到出口,相当于一条路走到黑
#include
using namespace std;
char a[20][20]; //存储迷宫字符数组
int flag,m,n;
int sdep_x[4]={-1,1,0,0},sdep_y[4]={0,0,-1,1};//控制上下左右方向
int vis[20][20]; //标记走过的路
void dfs(int x,int y)
{
vis[x][y]=1; //代表被标记过了
if(a[x][y]=="T") //找到出口
{
flag=1;
return;
}
for(int i=0;i<4;i++) //搜索路径
{
int h=x+sdep_x[i];
int l=y+sdep_y[i];
if(a[h][l]!="*"&&!vis[h][l]&&h>=0&&h=0&&l
{
dfs(h,l);
}
}
}
int main()
{
while(cin>>n>>m)
{
memset(vis,0,sizeof(vis));//初始化数组
flag=0;
int f,g;
for(int i=0;i
for(int j=0;j
cin>>a[i][j];
for(int i=0;i
for(int j=0;j
{
if(a[i][j]=="S")//先找到路口
{
f=i;
g=j;
}
}
dfs(f,g);
if(flag)
cout<
else
cout<
}
return 0;
}
第二种方法广度优先搜索:这一步之后,把接下来一步的所有路都列出来,在之后的所有扩展之中,在以一个为下一步,再将所有的该步可以到达的下一步,全部列举出来,再将第二步的其他选择中的每一步,都一一做扩展,每次扩展,都要检查所扩展的地方有没有到达搜索的要求。
可以定义一个队列,将扩展的点位置保存在队列,将扩展完毕的点出队
#include
using namespace std;
int vis[20][20];
char a[20][20];
int n,m;
int step_x[4]={-1,1,0,0},step_y[4]={0,0,-1,1};
struct data//定义一个结构体,里面包含x,y成员
{
int x;
int y;
};
data s,p;//定义两个结构体变量
queueq;//定义一个队列q
int BFS()
{
while(!q.empty())//当队列不为空时
{
p=q.front();//返回队列的第一个元素
vis[p.x][p.y]=1;
q.pop();//删除队列中最靠前的元素
if(a[p.x][p.y]=="T")//如果找到出口
return 1;
else
{
for(int i=0;i<4;i++)
{
s.x=p.x+step_x[i];
s.y=p.y+step_y[i];
if(s.x>=0&&s.x=0&&s.y
q.push(s);//将扩展的点的位置存入队尾
}
}
}
return 0;
}
int main()
{
while(cin>>n>>m)
{
while(!q.empty())
{
q.pop();//清空队列中的元素
}
for(int i=0;i
for(int j=0;j
cin>>a[i][j];
for(int i=0;i
{
for(int j=0;j
{
vis[i][j]=0;
if(a[i][j]=="S")
{
s.x=i;
s.y=j;
q.push(s);//将路口的位置保存在队尾
}
}
}
if(BFS())
cout<
else
cout<
}
return 0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。
原文链接:https://blog.csdn.net/weixin_45768308/article/details/107447338
c语言10迷宫,C语言实现走迷宫相关推荐
- 计算机图形学实验——三维迷宫的创建及走迷宫过程中的交互功能的实现
计算机图形学实验2 三维迷宫的创建及走迷宫过程中的交互功能的实现 OpenGL三维迷宫创建及交互 三维"图元"的绘制 迷宫结构的储存 视角转换的实现 碰撞检测 纹理贴图 小结 Op ...
- c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”
C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...
- c语言老鼠走迷宫原理,C语言算法(3) 老鼠走迷宫
1.Algorithm Gossip: 老鼠走迷官(一)说明:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法: ...
- java课程设计总结迷宫_Java课程设计走迷宫详解.doc
Java语言与面向对象技术 课程设计报告 ( 2014 -- 2015年度第 1 学期) 走迷宫 目 录 目 录2 1 概 述1 1.1 课程设计目的1 1.2 课程设计内容1 2 系统需求分析2 2 ...
- java课程设计总结迷宫_java课设走迷宫(含代码)#优质参考
java课设走迷宫(含代码)#优质参考 目录1设计目的1.1课程设计的目的2总体设计2.1设计思路2.2设计方法3关键技术4程序流程5主要源代码6. 运行结果及结论7.参考文献1.设计目的1.1课程设 ...
- java 迷宫代码_老鼠走迷宫代码 JAVA
展开全部 //老鼠走迷宫程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Maze1 ...
- 智能机器人走迷宫c语言游戏,(动态规划)机器人走迷宫问题(示例代码)
题目一:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tP ...
- Java老鼠走迷宫流程图_老鼠走迷宫(队列实现)
1.[文件] Game.cpp ~ 2KB 下载(134) // Game.cpp: implementation of the Game class. // // #include "Ga ...
- C语言写文件到txt里有屯字,C语言10 文件.ppt
第十章 文件 C文件概述 文件类型指针 文件的打开与关闭 文件的读写 文件的定位 出错的检测 赂恰滔氢戳骏市蔫盒少郴害篆汤看拴掳驮泅戈呕压琐憨波褪队敛紫爸戏仅C语言10 文件C语言10 文件 10.1 ...
- Dev-c++编写走迷宫游戏 思路和代码 详解
创作背景 今天又是放元旦假的一天,无聊的我刷够了手机,就跑过去打开电脑······ 熟悉的Dev-c++图标又映入我的眼帘,今天编点什么呢······ 我绞尽脑汁,冥思苦想,终于想到了一个游戏--走迷 ...
最新文章
- python录入数据至ppt_用 Python 让你的 PPT 数据动起来
- java newsize_JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize区别介绍...
- 台湾国立大学郭彦甫Matlab教程笔记(8)文件读写
- python分析服务器日志_python实现web服务器日志分析脚本
- sqlservr.exe占用大量内存
- Dubbo源码分析(一)Dubbo与Spring集成实例
- LeetCode Excel Sheet Column Number 表列数
- 看不见的“网” ,一文读懂阿里云基础设施网络
- Redis 集群(学习笔记十)
- VB 2010中Excel文件处理的一个奇怪问题
- ubuntu生成pem证书连接服务器(已验证)
- linux 爱数备份,爱数安全备份专家
- ansys workbench汉化教程_ARP8.1企业版安装及汉化教程 I 学之乎
- 改进YOLOv5系列:10.最新HorNet结合YOLO应用首发! | 多种搭配,即插即用 | Backbone主干、递归门控卷积的高效高阶空间交互高效
- 2018年十大区块链投资机构盘点-千氪
- 网络统考计算机应用基础ppt视频,计算机应用基础课程网络统考辅导.ppt
- 笔记本 ubuntu18.04双系统
- 什么是损失函数?什么是梯度
- ESP32使用microPython控制240x240彩色屏幕显示中文
- 开源不只用来玩,“拿来主义”遭唾弃
热门文章
- 数独解法/n皇后的回溯算法
- WWW 指南-万维网联盟(World Wide Web)
- php属相对应年份博客,生肖年份的起点
- 萤石云视频播放器来回切换视频报错bug
- 射灯安装方法图解_射灯如何安装—射灯的安装方法介绍
- 小米MiSans字体安装教程
- TensorFlow-Slim 教程(中文版)
- matlab char 转asc码,科学网—C语言与MATLAB对二进制文件与ASCII文件转换 - 张凌的博文...
- 什么是锁?有几种锁?怎么用锁?
- 西班牙国家德比次回合时间确定 中国球迷需熬夜