解救小哈(dfs或bfs)
题目描述:
有一天,小哈一个人去玩迷宫。但是方向感很不好的小哈很快就迷路了。小哼得知后便立即去解救无助的小哈。小哼当然是有备而来,已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈。问题就此开始了......
迷宫由m行n列的单元格组成的(m和n都小于50),每个单元格要么是空地要么是障碍物,你的任务是帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。
输入:
第一行有两个数m n。m表示迷宫的行,n表示迷宫的列。
接下来的m行n列为迷宫,0表示空地,1表示障碍物。
最后一行4个数,前两个数为迷宫入口的x和y坐标。后两个为小哈的x和y坐标。
输出:
输出小哼找到小哈走的最少步数。
样例输入:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
0 0 3 2
样例输出:
7
程序代码:
dfs
#include<stdio.h>
#include<string.h>
int m,n,p,q,min;
int a[60][60],book[60][60];
void dfs(int x,int y,int step);
int main()
{int i,j,startx,starty;while(scanf("%d%d",&m,&n)!=EOF){min=99999999;memset(book,0,sizeof(book));for(i=0;i<m;i++) for(j=0;j<n;j++)scanf("%d",&a[i][j]);scanf("%d%d%d%d",&startx,&starty,&p,&q);book[startx][starty]=1;//标记起点已经在路径中防止后面重复走 dfs(startx,starty,0);printf("%d\n",min);}return 0;
}
void dfs(int x,int y,int step)
{int next[4][2]={1,0,0,1,-1,0,0,-1};int tx,ty,k;if(x==p&&y==q)//判断是否到达小哈的位置 {if(step<min)min=step;return;}for(k=0;k<4;k++){tx=x+next[k][0];ty=y+next[k][1];if(tx<0||tx>m-1||ty<0||ty>n-1)continue;if(a[tx][ty]==0&&book[tx][ty]==0)//判断改点是否是障碍物或者已经在路径中 {book[tx][ty]=1;//标记这个点已经走过 dfs(tx,ty,step+1);//开始尝试下一个点 book[tx][ty]=0;//尝试结束,取消这个点的标记 }}return;
}
bfs
//bfs
#include<stdio.h>
#include<string.h>
struct note{int x;//横坐标 int y;//纵坐标 int step;//步数
};
int main()
{struct note que[3000];int a[60][60],book[60][60];int next[4][2]={1,0,-1,0,0,1,0,-1};int head,tail,i,j,k,m,n,p,q,startx,starty,tx,ty,flag;while(scanf("%d%d",&m,&n)!=EOF){memset(book,0,sizeof(book));for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);scanf("%d%d%d%d",&startx,&starty,&p,&q);//队列初始化 head=0;tail=0;//往队列插入迷宫入口坐标 que[tail].x=startx;que[tail].y=starty;que[tail].step=0;tail++;book[startx][starty]=1;flag=0;//用来标记是否到达目标点,0表示暂时还没有到达,1表示到达 while(head<tail)//当队列不为空时循环{for(k=0;k<4;k++){//计算下一个点的坐标 tx=que[head].x+next[k][0];ty=que[head].y+next[k][1];if(tx<0||tx>m-1||ty<0||ty>n-1)continue;//判断是否是障碍物或者已经在路径中 if(a[tx][ty]==0&&book[tx][ty]==0){//把这个点标记为已经走过// 注意广搜每个点只入队一次,所以和深搜不同,不需要将book数组还原 book[tx][ty]=1;//插入新的点到队列中 que[tail].x=tx;que[tail].y=ty;que[tail].step=que[head].step+1;//步数是父亲的步数加1 tail++;}//如果到了目标点,停止扩展,任务结束,退出循环 if(tx==p&&ty==q){flag=1;break;}}if(flag==1)break;head++;//当一个点扩展结束后,对后面的点进行扩展 }printf("%d\n",que[tail-1].step);//打印队列中末尾左后一个点(目标点)的步数 }return 0;
}
解救小哈(dfs或bfs)相关推荐
- 解救小哈——DFS算法举例
一.问题引入 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了... 二. ...
- 啊哈算法——万能的搜索——解救小哈DFS
迷宫由n行m列的单元格组成(n和m都小于50),每个单元格要么是空地,要么是障碍物.你的任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径. (障碍物不能走,且不可走到迷宫外) /*啊哈算法 ...
- 解救小哈——广度优先搜索bfs
有一天,小哈一个去玩迷宫.但是方向感很不好的小哈很快就迷路了.小哼得知后便立即去解救无助的小哈.小哼当然是有备而来,已经弄清楚了迷宫地图,现在小哼要以最快速度去解救小哈.问题就此开始了-- 迷宫由n行 ...
- 解救小哈(深度优先,广度优先)
题目描述: 有一天,小哈一个去玩迷宫.但是方向感很不好的小哈很快就迷路了.小哼得知后便立即去解救无助的小哈.小哼当然是有备而来,已经弄清楚了迷宫地图,现在小哼要以最快速度去解救小哈.问题就此开始了-- ...
- 啊哈算法-DFS解救小哈python版
DFS 啊哈算法-解救小哈 maze_map = [] n,m = map(int,(input()).split()) maze_map = [input().split() for i in ra ...
- 解救小哈(dfs)-->改编自《啊哈!算法》
[算法描述] 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题就此开始了... ...
- 宽搜 c语言,啊哈算法之宽搜BFS解救小哈
简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目--BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...
- 12032 解救小哈
标题: 解救小哈 标签: 搜索 广度优先搜索 详情: 有一天,小哈一个去玩迷宫.但是方向感很不好的小哈很快就迷路了.小哼得知后便立即去解救无助的小哈.小哼当然是有备而来,已经弄清楚了迷宫地图,现在小哼 ...
- 蓝桥杯:解救小哈最短路径
bfs解救小哈最短路径 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了- ...
最新文章
- java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?
- 中班游戏电子计算机,计算器中班歌唱活动教案
- Severstal: Steel Defect Detection比赛的discussion调研
- 小学五年级计算机备考方案,五年级数学备考计划_备考经验
- 数据结构基础:栈(Stack)
- 2字节十六进制浮点数 qt_Qt之8个字节转化为double小数
- 牛客 数学实验(模拟)
- CPU 被挖矿,Redis 竟是内鬼!
- Linux服务之SSH
- Android 四种启动模式
- 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
- linux常见命令用法之(二)
- 大数据平台的元数据管理
- 计算机网络 网络安全问题概述
- QT关于屏幕保护程序
- Exchange 2010环境部署2
- 信号卷积和图像卷积滤波
- 拯救剧荒,程序员最爱看的高分美剧TOP10
- 技术面试要做哪些准备?
- 百度飞桨:给出关键词,AI自动生成元宵节祝福~
热门文章
- python 中字符串大小写转换
- 多点子接口的帧中继配置
- #tomcat#内部结构和处理一个请求的过程(一)
- Spring Cloud Eureka 2 (Eureka Server搭建服务注册中心)
- a href=javascript:void(0)
- 不用也要知道的几种算法(PHP版本)
- lucene可用中文分词IKAnalyzer,maven pom下载代码及配置文件
- JMETER分布式部署注意事项
- python在csv模块添加新列_如何在CSV文件的开头添加新列?
- oracle无+密码登陆,Oracle 11g通过wallet实现无密码登录