\(To\) \(SP96\)

这是一道比较简单的 \(bfs\) ,初学者可以锻炼一下自己理解题意和改代码的能力。

题目中有几个细节:

  • \(n\) 和 \(m\) 的输入顺序,应该先输入 \(m\) ,再输入 \(n\) 。
  • 输入时如果用的是 \(scanf\) ,要注意对换行符的处理。
  • 当 \(n=0\) \(m=0\) 时,结束输入。
  • 注意初始化。

一般的 \(bfs\) 则是开一个数组来储存这个点有无访问过,可是这道题,所要求的是最短时间,因此访问过的点不一定是最优路径,因此,应该换一种思路,重开一个数组来储存到达这个点的最短时间

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct node{
int x;
int y;
int time;
};
int n,m;
char mp[5000][5000];
int vis[5000][5000];
queue<node> Q;
int sx,sy,ex,ey;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int main(){
while(1){
scanf("%d%d",&m,&n);//输入的时候注意m和n的顺序
if(n==0&&m==0){//结束输入
break;
}
memset(mp,0,sizeof(mp));
memset(vis,0x7,sizeof(vis));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf(" %c",&mp[i][j]);//过滤换行符
if(mp[i][j]=='S'){//储存起点坐标
sx=i;
sy=j;
}
if(mp[i][j]=='D'){//储存终点坐标
ex=i;
ey=j;
}
}
}
node a,b,c;
a.x=sx;
a.y=sy;
a.time=0;
Q.push(a);
while(!Q.empty()){
b=Q.front();
Q.pop();
for(int i=0;i<4;i++){
c.x=b.x+dx[i];
c.y=b.y+dy[i];
if(c.x==ex&&c.y==ey){
if(vis[ex][ey]>b.time) vis[ex][ey]=b.time;
}
if(c.x>=0&&c.x<n&&c.y>=0&&c.y<m&&mp[c.x][c.y]>='1'&&mp[c.x][c.y]<='9'){
c.time=b.time+(mp[c.x][c.y]-'0');
if(c.time<vis[c.x][c.y]) vis[c.x][c.y]=c.time;
else continue;//如果此方案无法更优,则直接废除此方案
a.x=c.x;
a.y=c.y;
a.time=c.time;
Q.push(a);
}
}
}
printf("%d\n",vis[ex][ey]);
while(!Q.empty()){//清空队列
Q.pop();
}
}
return 0;
}

SP96 SHOP-Shopping 题解的更多相关文章

  1. OWASP JUICE SHOP部分题解

    本文作者:S0u1 0×00 简介 OWASP JUICE SHOP是一个开源的web应用靶场,里面包含了共记47个漏洞挑战任务,囊括了OWASP TOP 10的各个点,是一个很不错的渗透测试练手项目 ...

  2. openjpa框架入门_项目框架搭建(二)

    Openjpa2.2+Mysql+Maven+Servlet+JSP 首先说明几点,让大家更清楚整体结构: 官方source code 下载:http://openjpa.apache.org/dow ...

  3. 第二十二天 logging hashlib re 模块

    今日内容 logging功能完善的日志模块 re正则表达式模块主要处理字符串匹配 查找 搜索给你一个字符串 要从中找到你需要的东西 爬虫大量使用 hashlib hash算法相关的库 算法怎么算不需要 ...

  4. java并发编程(三)----线程的同步

    在现实开发中,我们或多或少的都经历过这样的情景:某一个变量被多个用户并发式的访问并修改,如何保证该变量在并发过程中对每一个用户的正确性呢?今天我们来聊聊线程同步的概念. 一般来说,程序并行化是为了获得 ...

  5. PAT甲题题解-1044. Shopping in Mars (25)-水题

    n,m然后给出n个数让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m并且按l的大小顺序输出对应区间.如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案. 如果两层fo ...

  6. 题解 【POJ1157】LITTLE SHOP OF FLOWERS

    先把题目意思说一下: 你有F束花,编号为\(1\)~\(F\)(\(1<=F<=100\)),\(V\)个花瓶,编号为\(1\) ~\(V\)(\(1<=V<=100\)), ...

  7. Codeforces Gym 100803C Shopping 贪心

    Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...

  8. Codeforces Round #332 (Div. 2) A. Patrick and Shopping 水题

    A. Patrick and Shopping Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  9. USACO 3.3 Shopping Offers

    Shopping OffersIOI'95 In a certain shop, each kind of product has an integer price. For example, the ...

随机推荐

  1. NLP教程(4) - 句法分析与依存解析

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  2. Java 14中对switch的增强,终于可以不写break了

    面对这样的if语句,你是不是很难受呢? if (flag == 1) { log.info("didispace.com: 1"); } else if (flag == 2) { ...

  3. 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程

    一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...

  4. 对象、Map、Set、WeakMap、WeakSet

    对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...

  5. 羽夏 Bash 简明教程(下)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  6. 实战派 | Java项目中玩转Redis6.0客户端缓存!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...

  7. 好客租房55-props深入(2props校验)

    对于组件来说 props是外来的 无法保证使用者传入什么格式的数据 传入的数据格式不对 可能会导致组件内部报错 关键问题:不知道报错的具体原因 1安装包props-types 2导入props-typ ...

  8. 前端js堆栈

    1.介绍创建数据的时候就会占用内容.内存主要开辟了两类空间1. 堆(进程,线程共享) 大小不固定,可随时增加不允许js直接访问堆内存存储引用类型数据按引用访问存储的值大小不定,可动态调整主要用来存放对 ...

  9. Nexus5x 修改Android开机动画

    1.制作帧动画 这里随便从网上找了一个gif图片,导入PS中,打开后会形成很多帧图层,选择导航栏中的文件->脚本->将图层导出到文件可以将所有图层导出来.要注意文件命名,Android会按 ...

  10. 动态调试JS脚本文件:(JS源映射 - sourceURL)与 debugger

    我们在进行js调试时经常会对js进行调试,chrome 对js提示对支持非常友好,只需要F12就可以打开chrome的调试器 在sources里面就是页面请求后加载的一些资源文件,我们可以找到我们的j ...