搜索测试题题解(3月19号总结)

目录

1.Dungeon Master

2.Oil Deposits

3.Find a way


1.Dungeon Master

Sample

InputcopyOutputcopy
3 4 5
S....
.###.
.##..
###.######
#####
##.##
##...#####
#####
#.###
####E1 3 3
S##
#E#
###0 0 0
Escaped in 11 minute(s).
Trapped!

这道题与普通的bfs模板题就是地图变成三维的了,其余一律按照模板做法来即可。

下面是AC代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int h,n,m;
char mp[35][35][35];
struct point{//结构体定义 int z,x,y,step;
};
int v[35][35][35];//是否遍历判断数组 
int dx[]={1,-1,0,0,0,0};//枚举6个操作 
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
int main()
{while(cin>>h>>n>>m){if(h==0&&n==0&&m==0) break;//运行结束标志 int ex,ey,ez,sx,sy,sz;for(int i=1;i<=h;i++){for(int j=1;j<=n;j++){for(int k=1;k<=m;k++){cin>>mp[i][j][k];if(mp[i][j][k]=='S'){sz=i,sx=j,sy=k;//找到起点位置 }if(mp[i][j][k]=='E'){ez=i,ex=j,ey=k;//找到终点位置 }	}}}queue<point>q;point st;st.x=sx,st.y=sy,st.z=sz,st.step=0;v[sz][sx][sy]=1;q.push(st);int f=0;while(!q.empty()){point k=q.front();q.pop();if(k.x==ex&&k.y==ey&&k.z==ez)//到达位置 {f=1;cout<<"Escaped in "<<k.step<<" minute(s).\n";//按照格式输出 break;}for(int i=0;i<6;i++){int tx=k.x+dx[i];int ty=k.y+dy[i];int tz=k.z+dz[i];if(tx<1||ty<1||tz<1||tz>h||tx>n||ty>m||mp[tz][tx][ty]=='#'||v[tz][tx][ty]) continue;//错误位置判断 v[tz][tx][ty]=1;point p;p.x=tx,p.y=ty,p.z=tz,p.step=k.step+1;q.push(p);//赋值入队 }}if(f==0){cout<<"Trapped!\n";//走不出 }memset(v,0,sizeof(v));//初始化,防止对下一次数据造成影响 }return 0;
}

2.Oil Deposits

Sample

InputcopyOutputcopy
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5 
****@
*@@*@
*@**@
@@@*@
@@**@
0 0 
0
1
2
2

该题需要我们找出有多少种类的油,当两油的相对位置如下

则这两油为同一种类的油,可以用dfs对一油袋周围深搜,搜到的油改为平底,这用每搜一次,对应的不同种类油就可以+1。

下面是AC代码:

#include<cstdio> 
#include<iostream> 
using namespace std;
char mp[120][120];
int n,m,ans;
int dx[8]={-1,-1,0,1,1,1,0,-1};//操作方向 
int dy[8]={0,1,1,1,0,-1,-1,-1}; 
void dfs(int x,int y)   
{if(x<0||y<0||x>=n||y>=m) return;//越界停止搜 if(mp[x][y]=='@'){mp[x][y]='*';for(int i=0;i<8;i++){dfs(x+dx[i],y+dy[i]);//继续搜 }}return;
}              
int main()
{while(cin>>n>>m){if(n==0&&m==0) break;ans=0;//初始化 for(int i=0;i<n;i++)cin>>mp[i];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(mp[i][j]=='@')//发现不同种类油袋 ans++,dfs(i,j);//将与它连通的油袋变为'*' }} cout<<ans<<"\n";}return 0;
}

3.Find a way

Sample

InputcopyOutputcopy
4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#
66
88
66

这道题要求我们找到一个Y和M去到一家肯德基汇合的最短时间和,我们可以分别给Y和M定义一个距离数组,为Y和M到相应位置的距离,后面对肯德基的位置比较,找到一个最短距离和。

下面是AC代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
char mp[201][201];
int v[201][201];
int dis1[201][201],dis2[201][201];//定义两个距离数组 
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct node{int x,y;
};
int bfs(int x,int y,int n,int m,char f)
{queue<node>q;node st;int ans=0;st.x=x,st.y=y;v[x][y]=1;q.push(st);while(!q.empty()){node k=q.front();q.pop();for(int i=0;i<4;i++){int tx=k.x+dx[i];int ty=k.y+dy[i];if(!v[tx][ty]&&mp[tx][ty]!='#'&&tx>=1&&ty>=1&&tx<=n&&ty<=m){v[tx][ty]=1;node p;if(f=='Y') dis1[tx][ty]=dis1[k.x][k.y]+1;//按照f,给相应的距离数组赋值 else dis2[tx][ty]=dis2[k.x][k.y]+1;p.x=tx,p.y=ty;;q.push(p);}}}return ans*11;
}
int main()
{int n,m;while(cin>>n>>m){node kfc[40100];int z=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>mp[i][j];if(mp[i][j]=='@') kfc[++z].x=i,kfc[z].y=j;//找到每家kcf的位置 }}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(mp[i][j]=='Y') {bfs(i,j,n,m,'Y');memset(v,0,sizeof(v));//初始化 }if(mp[i][j]=='M'){bfs(i,j,n,m,'M');memset(v,0,sizeof(v));} }}int ans=1e8;for(int i=1;i<=z;i++){if(dis1[kfc[i].x][kfc[i].y]!=0&&dis2[kfc[i].x][kfc[i].y]!=0)ans=min(ans,dis1[kfc[i].x][kfc[i].y]+dis2[kfc[i].x][kfc[i].y]);//更新最短距离 }cout<<ans*11<<"\n";memset(dis1,0,sizeof(dis1));//初始化 memset(dis2,0,sizeof(dis2));} return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性顺序表算法库

list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…

Iterator对象功能学习

package config;import java.util.Iterator; import java.util.Properties; import java.util.Set;/*** 这个类演示了如何使用Properties类来存储和访问键值对。* Properties类继承自Hashtable&#xff0c;因此它可以用来存储键值对数据&#xff0c;且支持同步。*/ public clas…

代码随想录算法训练营第十七天|110、平衡二叉树

110. 平衡二叉树 已解答 简单 相关标签 相关企业 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&am…

计算机二级Python基础操作题

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 第4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;9&#xff0c;10&#xff0c;11套 1. 基础题1 sinput() print("{:\"^30x}".format(eval(s))) b …

安科瑞ADL逆流检测多功能电表

ADL400 导轨式多功能电能表&#xff0c;是主要针对电力系统&#xff0c;工矿企业&#xff0c;公用设施的电能统计、管理需求而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理&#xff0c;提供上48月的各类电…

2024年企业上云补贴,免费领取腾讯云优惠代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

springboot实现文件上传

SpringBoot默认静态资源访问方式 首先想到的就是可以通过SpringBoot通常访问静态资源的方式&#xff0c;当访问&#xff1a;项目根路径 / 静态文件名时&#xff0c;SpringBoot会依次去类路径下的四个静态资源目录下查找&#xff08;默认配置&#xff09;。 在资源文件resour…

3·15日,上海飞北京,东航全球首架C919亲测初体验

引言&#xff1a;“望闻问切”亲测 感受C919机型的航班 【阿明观察 &#xff5c; 科技热点关注】 赶巧了&#xff01;2024年3月15日消费者权益日这天&#xff0c;上海飞北京&#xff0c;我选择了采用C919的东方航空公司航班。 真赶巧了&#xff01;上了飞机后我才知道&…

Spring Boot项目中使用MyBatis连接达梦数据库6

在开发中&#xff0c;使用Spring Boot框架结合MyBatis来操作数据库是一种常见的做法。本篇博客将介绍如何在Spring Boot项目中配置MyBatis来连接达梦数据库6&#xff0c;并提供一个简单的示例供参考。(达梦六不仅分表还分模式.) 我拿SYSTEM表的LPS模式下面Student表做案例。 1.…

GPT中使用的Gaussian Error Linear Unit (GELU)

GPT中使用的Gaussian Error Linear Unit (GELU) flyfish 高斯误差线性单元&#xff08;GELU&#xff09; Gaussian Error Linear Unit g e l u ( x ) x P ( X ≤ x ) X ∼ N ( 0 , 1 ) gelu(x) x P(X \leq x) \qquad X \sim \mathcal{N}(0, 1) gelu(x)xP(X≤x)X∼N(0,1) G…

2024年【山东省安全员C证】免费试题及山东省安全员C证作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员C证免费试题根据新山东省安全员C证考试大纲要求&#xff0c;安全生产模拟考试一点通将山东省安全员C证模拟考试试题进行汇编&#xff0c;组成一套山东省安全员C证全真模拟考试试题&#xff0c;学员可通过…

【Qt】使用Qt实现Web服务器(六):QtWebApp用户名密码登录

1、示例 1)演示 2)登录 3)显示 2、源码 示例源码Demo1->LoginController void LoginController::service(HttpRequest& request, HttpResponse& response) {

【Linux】/proc文件系统

&#x1f525;博客主页&#xff1a;PannLZ &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 /proc文件系统1.获取与进程相关的信息:/proc/ID2./proc 目录下的系统信息3. 访问/proc 文件4.动态创建/proc文件系统4.1创建目录4.2创建proc…

双点双向路由引入实验

双点双向路由引入实验 1、OSPF和ISIS路由协议的优先级分别是什么&#xff1a;OSPF&#xff1a;10&#xff0c;150&#xff0c;ISIS&#xff1a;15&#xff0c;15 2、加表原则&#xff1a;当不同的路由协议学习到相同的目的网络&#xff0c;比较优先级&#xff0c;优先级数值小…

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

2024年【化工自动化控制仪表】考试试卷及化工自动化控制仪表模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表考试试卷是安全生产模拟考试一点通总题库中生成的一套化工自动化控制仪表模拟考试题&#xff0c;安全生产模拟考试一点通上化工自动化控制仪表作业手机同步练习。2024年【化工自动化控制仪表】考试…

Java 模拟Spring,实现IOC和AOP的核心(一)

在这里我要实现的是Spring的IOC和AOP的核心&#xff0c;而且有关IOC的实现&#xff0c;注解XML能混合使用&#xff01; 参考资料&#xff1a; IOC&#xff1a;控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种…

Java项目:70 ssm小学生课外知识学习网站+vue

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员&#xff1b;首页、个人中心、医护人员管理、科室管理、病人管理、病房管理、病人信息管理、病历管理、医嘱管理、手术安排管理、药品信…

2024-3-17上机C++刷题

题目一: 反序数_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/e0d06e79efa44785be5b2ec6e66ba898?tpId60&tqId31035&tPage2&ru/kaoyan/retest/1001&qru/ta/tsing-kaoyan/question-ranking #include<iostream> using namespace s…

进度图画法

exce表格进度图画法&#xff0c;体现在条形图以及“格子”的空间的填充两种办法。 1.excel表格画进度图 备注&#xff1a;表格照着就是可以了&#xff0c;主要是画直线的办法 在形状的下拉菜单中选择直线&#xff0c;按住shift&#xff08;可以画直线&#xff09; 画直线后&a…