\(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. 最新 x86_64 系统调用入口分析 (基于 5.7.0)

    最新 x86_64 系统调用入口分析 (基于5.7.0) 整体概览 最近的工作涉及系统调用入口,但网上的一些分析都比较老了,这里把自己的分析过程记录一下,仅供参考. x86_64位系统调用使用 SYS ...

  2. 干货长文:Linux 文件系统与持久性内存介绍

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 1.Linux 虚拟文件系统介绍 在 Linux 系统中一切皆文件,除了通常所说的狭义的文件以 ...

  3. Android8.0 后台服务保活的一种思路

    原文地址:Android8.0 后台服务保活的一种思路 | Stars-One的杂货小窝 项目中有个MQ服务,需要一直连着,接收到消息会发送语音,且手机要在锁屏也要实现此功能 目前是使用广播机制实现, ...

  4. 客户案例-SES S.A.

    SES专门为世界上最偏远的地方提供高性能的移动网络连接.广播.维和人员的实时情报和媒体内容. SES是一个全球性组织,专注于提供高性能的视频和虚拟数据解决方案.今天,SES拥有最大的覆盖范围,有超过7 ...

  5. 从 rails 窥探 web 全栈开发(零)

    从 rails 窥探 web 全栈开发(零) 本文将讲述在学习之前几个必须要知道的概念,这些词汇在 rails 中都会出现. 本文前置条件:安装好 Ruby. 从 rails 窥探 web 全栈开发( ...

  6. 使用VUE+SpringBoot+EasyExcel 整合导入导出数据

    使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...

  7. git rename branch

    git 不能直接重命名远程分支,如果需要重命名则执行以下步骤操作: 重命名本地分支 删除远程分支 推送本地分支(重命名后的)到远程 额外说明: 1. 重命名后的分支也会保留历史 commit(应该是本 ...

  8. Java 统计新客户

    上周做了一个订单数据统计的任务,统计的是订单的新客户数量,本文做一个解题过程的记录和整理. 新客户的定义 新客户指的是选取时间段有订单,时间段之前没有订单. 比如下面的订单数据: 时间段 2月1日之前 ...

  9. [NOI2011]阿狸打字机

    题意:一开始是个空串s,有三种操作:(1.末尾加一个字符 2.末尾减一个字符 3.存储该字符串) 思路: 一开始在trie树上动态加点很好处理,3操作的时候记录一下此时trie树上的pos,同时记录d ...

  10. java通过socket实现https get 请求网页

    1. 首先要初始化ssl context SSLContext context = SSLContext.getDefault(); socket = (SSLSocket) context.getS ...