Description
問題

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

この町には,N 個のチーズ工場があり,どの工場も1種類のチーズだけを生産している.チーズの硬さは工場によって異なっており,硬さ 1 から N までのチーズを生産するチーズ工場がちょうど 1 つずつある.

ねずみの最初の体力は 1 であり,チーズを 1 個食べるごとに体力が 1 増える.ただし,ねずみは自分の体力よりも硬いチーズを食べることはできない.

ねずみは,東西南北に隣り合う区画に 1 分で移動することができるが,障害物の区画には入ることができない.チーズ工場をチーズを食べずに通り過ぎることもできる.すべてのチーズを食べ終えるまでにかかる最短時間を求めるプログラムを書け.ただし,ねずみがチーズを食べるのにかかる時間は無視できる.

入力

入力は H+1 行ある.1 行目には 3 つの整数 H,W,N (1 ≤ H ≤ 1000,1 ≤ W ≤ 1000,1 ≤ N ≤ 9) がこの順に空白で区切られて書かれている.2 行目から H+1 行目までの各行には,’S’,’1’, ‘2’, …, ‘9’,’X’,’.’ からなる W 文字の文字列が書かれており,各々が各区画の状態を表している.北から i 番目,西から j 番目の区画を (i,j) と記述することにすると (1 ≤ i ≤ H, 1 ≤ j ≤ W),第 i+1 行目の j 番目の文字は,区画 (i,j) が巣である場合は ‘S’ となり,障害物である場合は ‘X’ となり,空き地である場合は ‘.’ となり,硬さ 1, 2, …, 9 のチーズを生産する工場である場合はそれぞれ ‘1’, ‘2’, …, ‘9’ となる.入力には巣と硬さ 1, 2, …, N のチーズを生産する工場がそれぞれ 1 つずつある.他のマスは障害物または空き地であることが保証されている.ねずみは全てのチーズを食べられることが保証されている.

出力

すべてのチーズを食べ終えるまでにかかる最短時間(分)を表す整数を 1 行で出力せよ.

入出力例

入力例 1
3 3 1
S..

..1

出力例 1
4

入力例 2
4 5 2
.X..1
….X
.XX.S
.2.X.

出力例 2
12

入力例 2
10 10 9
.X…X.S.X
6..5X..X1X
…XXXX..X
X..9X…X.
8.X2X..X3X
…XX.X4..
XX….7X..
X..X..XX..
X…X.XX..
..X…….

出力例 2
91

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

题意:
先给你三个数字(n, m, k),(n, m)表示矩阵大小,k表示你要找的最大数字,从数字1开始找。
坑点:找到数字1之后再从数字1所在的点找数字2。。直到数字k;
代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
using namespace std;
char ss[100][100];
int dis[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
int n, m, vis[100][100], t1, t2;
struct xx
{int x, y;
}vv;
queue <xx> qq;
int check(int x, int y)
{if((x >= 0 && x < n) && (y >= 0 && y < m)) return 1;return 0;
}
void bfs()
{int ans = 1;while(!qq.empty()){vv = qq.front();qq.pop();int x1 = vv.x;int y1 = vv.y;for(int i = 0; i < 4; i++){int x0 = x1 + dis[i][0];int y0 = y1 + dis[i][1];if(check(x0, y0) && ss[x0][y0] != '#' && !vis[x0][y0]){ans++;vis[x0][y0] = -1;vv.x = x0;vv.y = y0;qq.push(vv);}}}printf("%d\n", ans);
}
int main()
{while(~scanf("%d %d", &m, &n)){if(!n && !m) break;memset(vis, 0, sizeof(vis));int flag = 0;for(int i = 0; i < n; i++)scanf("%s", ss[i]);for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(ss[i][j] == '@'){vis[i][j] = -1;vv.x = i;vv.y = j;qq.push(vv);flag = 2;break;}}if(flag) break;}bfs();}return 0;
}

广搜4 ——Cheese相关推荐

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

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

  2. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  3. 搜索:广搜 词语阶梯

    问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...

  4. [NC23486]小A与小B 双向广搜

    题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...

  5. 【图论专题】BFS中的双向广搜 和 A-star

    双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...

  6. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  7. UVA 122 Trees on the level 二叉树 广搜

    题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...

  8. hrbust 1616 密码锁(广搜)

    分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...

  9. [kuangbin] M - Find a way(简单广搜)

    题目链接:https://vjudge.net/contest/215603#problem/M 其中三维数组dis将两个广搜合并到了一起 #include<iostream> #incl ...

最新文章

  1. 转录组测序技术和结果解读(二)——文库构建和测序策略
  2. 一文了解卷积神经网络基础,建议收藏
  3. 图文详解安装NetBackup 6.5备份恢复Oracle 10g rac 数据库(修订)
  4. linux fedora 35 彻底卸载idea2021.2.2
  5. inc指令是什么意思_mips指令集与cpu架构(一)
  6. MySQL month()函数
  7. Git之第三方托管oschina
  8. php全局cors,PHP开启CORS - slagga的个人页面 - OSCHINA - 中文开源技术交流社区
  9. lambda表达式之进化
  10. selenium headless报错Message: unknown error: failed to wait for extension background page to load
  11. 通用模块(4)——EEPROM(AT24C08)
  12. iPad,下载迅雷电影,迅雷HD出现“应版权方要求,文件无法下载”解决方法!
  13. git 记住账号密码、忽略部分文件、合并分支、将远程分支拉取到本地
  14. OpenGL ES教程VI之纹理贴图(原文对照)
  15. 基于iPhone 上的运动协处理器M7判断用户当前的运动(姿态)类型
  16. 传感器实验——控制电机
  17. python 遍历list获取元素的序号_Python列表(List)的三种遍历(序号和值)方法
  18. Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
  19. 可解释的机器学习(XML)概览
  20. acwing 784. 强盗团伙

热门文章

  1. 莫纳什计算机专业优势,2020年去澳洲留学就读莫纳什大学计算机学院有哪些优势?...
  2. C++ - STL标准库
  3. 软件缺陷静态分析CodeSonar
  4. 证券公司信息化——8
  5. 精彩回顾 | Dev.Together 2022 开发者生态峰会圆满落幕
  6. 如何用手机控制电脑或电脑控制手机?
  7. mysql 数据横向拼接_Mysql 合并结果接横向拼接字段
  8. 微信官方支付接口配置教程
  9. mysql binlog grep_通过mysqlbinlog和grep命令定位binlog文件中指定操作
  10. python制作冰花_《冰花》教学反思