题意:网格图,老鼠吃奶酪,吃完奶酪体力值会增加,只能吃硬度不大于体力值的,问最小步数。

思路:按硬度从小到大的吃起,依次求最短路。

我用曼哈顿距离估价的A*,和普通bfs的time没区别啊,还把优先级那里写错了。。。

#include<bits/stdc++.h>
using namespace std;#define PS push
#define PB push_back
#define MP make_pair
#define fi first
#define se second
const int INF = 0x3f3f3f3f;typedef long long ll;inline int read()
{int ret; char c; while(c = getchar(),c<'0'||c>'9');ret = c-'0';while(c = getchar(),c>='0'&&c<='9') ret = ret*10 + c-'0';return ret;
}const int SZ = 1e3+5;char g[SZ][SZ];
int H,W,N;
int vis[SZ][SZ],clk;
struct Node
{int x,y,f,h;bool operator <(const Node&th) const {return f > th.f || ( f == th.f && h < th.h);//
    }
}pos[10];int tar;
inline int MHT(Node &o)
{return (abs(pos[tar].x-o.x) + abs(pos[tar].y-o.y));
}void GetPos()
{REP0(i,H){REP0(j,W){char c = g[i][j];if(c == 'S'){pos[0] = {i,j};}else if('1'<= c && c <='9' ){pos[c-'0'] = {i,j};}}}
}const int dx[] = {0,1,0,-1};
const int dy[] = {1,0,-1,0};inline bool valid(int x,int y)
{return x>=0&&x<H&&y>=0&&y<W&&g[x][y]!='X'&&vis[x][y] != clk;
}int astar_bfs(int st)
{priority_queue<Node> q;Node u;u.x = pos[st].x;u.y = pos[st].y;u.h = u.f = MHT(u);q.push(u);clk++;while(q.size()){u = q.top(); q.pop();if(u.x == pos[tar].x && u.y == pos[tar].y ) return u.f-u.h;REP0(k,4){Node v;v.x = u.x + dx[k];v.y = u.y + dy[k];if(!valid(v.x,v.y)) continue;vis[v.x][v.y] = clk;v.h = MHT(v);v.f = u.f-u.h+1+v.h;q.push(v);}}return -1;
}//#define LOCAL
int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endifH = read(); W = read(); N = read();for(int i = 0; i < H; i++){scanf("%s",g[i]);}GetPos();int ans = 0;REP1(i,N){tar = i;ans += astar_bfs(i-1);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4889607.html

AOJ 558 Cheese(bfs)相关推荐

  1. BFS Aoj 0558 Cheese

    在 H×W 的地图上有 N 个奶酪工厂, 分别生产硬NN 的奶酪. 有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值, 初始时为 11, 每吃一个工厂的奶酪体力值增加 11(每个工 ...

  2. [Aizu]-0558 Cheese [BFS]

    問題 今年も JOI 町のチーズ工場がチーズの生産を始め,ねずみが巣から顔を出した.JOI 町は東西南北に区画整理されていて,各区画は巣,チーズ工場,障害物,空き地のいずれかである.ねずみは巣から出発 ...

  3. 专题一:简单搜索、深搜、广搜

    挑战程序设计竞赛(课后题难题汇总) 1. AOJ 0033 Ball(贪心) #include<cstdio> #include<algorithm> using namesp ...

  4. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  5. BFS:图的最短路径  Aizu - 0558 ​​​​​​​Cheese

    Cheese Aizu - 0558 大意:在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工 ...

  6. AOJ0558 Cheese【BFS】

    問題 今年も JOI 町のチーズ工場がチーズの生産を始め,ねずみが巣から顔を出した.JOI 町は東西南北に区画整理されていて,各区画は巣,チーズ工場,障害物,空き地のいずれかである.ねずみは巣から出発 ...

  7. 运用BFS算法实现北京地铁路线换乘系统

    本文通过我做过的一个小项目来分享一下如何通过BFS搜索算法实现北京地铁换乘路线.搜索的规则分别为最短距离与最少换乘线路.BFS算法的原理这里就不讲了,推荐一个B站的视频,对搜索算法讲解的很清晰: BF ...

  8. HDUOJ 1078 FatMouse and Cheese

    HDUOJ 1078 FatMouse and Cheese 题目链接 Problem Description FatMouse has stored some cheese in a city. T ...

  9. LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

    417. 太平洋大西洋水流问题 难度中等558 有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋&quo ...

最新文章

  1. CentOS 7.6安装OpenMPI3.1.0
  2. mysql的数据类型以及性能优化
  3. 如何移动SQL SERVER的系统数据库
  4. [HTTP] HTTP消息
  5. java为什么要设计包装类_Java 为什么需要包装类
  6. 关于AE中出现 “对 COM 组件的调用返回了错误 HRESULT E_FAIL” 错误
  7. python编写财务软件_python 与财务
  8. js图片上传(配合七牛云)
  9. matlab多项式除法 分式展开,多项式除法有一种处理假分式的方法叫多项式除 – 手机爱问...
  10. UE4 InputMode无法锁定编辑器视口鼠标解决方案
  11. 1383: 手机短号 (多实例)
  12. setup/teardown用法汇总
  13. 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
  14. 医疗行业:容灾备份平台建设及运维难点
  15. 客户端与服务器的理解
  16. SIM7600CE应用程序调试流程
  17. 论文笔记-Vanilla Transformer:Character-Level Language Modeling with Deeper Self-Attention
  18. Lake Shore—CRX-EM-HF 型低温探针台
  19. 用cygwin从本地向ubuntu某路径下传文件时Permission denied解决方法
  20. 阿里百秀后台管理项目笔记 ---- Day01

热门文章

  1. toLua关于委托没有注册的解决方案
  2. 前端工程师必备:学习资源全网罗
  3. ThinkPHP3.1快速入门(6)路由
  4. 从软件工程看,语言只是工具
  5. 利用pylot进行性能测试
  6. zabbix nginx error log监控
  7. 直接调用android原生接口实现点击直接拨打电话功能
  8. 通过案例对SparkStreaming透彻理解-3
  9. shell bash判断文件或文件夹是否存在
  10. 正则表达式:Pattern 与Matcher