题目:

一个每块地板标记着0~9某个数字的迷宫,其中标记1的地板不可以走,标记2~9的地板可以不花时间地跳到任意相同数字的位置,也可以和标记0的地板一样向前后左右任意方向花1个单位时间移动1的距离。给出起点和终点,求起点到终点的最短时间。

给组测试数据:

INTPUT:

3

S20

111

E20

OUTPUT:

2

INTPUT:

3

S12

345

67E

OUTPUT:

4

#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
#define N 110
using namespace std;
int  vis[N][N], dis[N][N];
int x1, x2, y1, y2, n;
int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
char map[N][N];
void bfs(int x, int y)
{int ans = n * n;int tx, ty, i, j, k, ttx, tty;queue<pair<int, int> > Q;Q.push(make_pair(x, y));vis[x][y] = 1;dis[x][y] = 1;while(!Q.empty()){ans--;if(!ans)break;tx = Q.front().first, ty = Q.front().second;if(tx == x2 && ty == y2){printf("%d\n", dis[x2][y2] - 1);return ;}Q.pop();if(map[tx][ty] != '1'){for(k = 0; k < 4; k++){ttx = tx + dx[k];tty = ty + dy[k];if(!dis[ttx][tty] && map[ttx][tty] != '1' && ttx >= 0 && ttx < n && tty >= 0 && tty < n){vis[ttx][tty] = 1;dis[ttx][tty] = dis[tx][ty] + 1;Q.push(make_pair(ttx, tty));if(map[ttx][tty] >= '2' && map[ttx][tty] <= '9')/*注意这应该是一次性的把2~9相同的数字都入队*/{for(i = 0; i < n; i++)for(j = 0; j < n; j++)if(map[i][j] == map[ttx][tty] && !dis[i][j]){vis[i][j] = 1;dis[i][j] = dis[ttx][tty];Q.push(make_pair(i, j));}}}}}}printf("Oh No!\n");
}
int main()
{int i;while(~scanf("%d", &n)){memset(vis, 0, sizeof(vis));memset(dis, 0, sizeof(dis));getchar();for(i = 0; i < n; i++){for(int j = 0; j < n; j++){map[i][j] = getchar();if(map[i][j] == '1')vis[i][j] = 1;else if(map[i][j] == 'S')x1 = i, y1 = j;else if(map[i][j] == 'E')x2 = i, y2 = j;}getchar();}bfs(x1, y1);}return 0;
}

跳跳 (BFS) CUS 1259相关推荐

  1. CSU 1259 bfs找最短路

    题目大意: 不想介绍,题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1259 bfs求最短路. 这里因为2-9,到达同样的点不计步数,那我 ...

  2. 2786 我跳我跳我跳跳跳【Bfs】

    题目描述 有一条直线,上有n个点,编号从0到n-1.当小A站在s点处,每次可以往前跳到s+1,也可以往前跳到s-1(当s-1 >= 0时),也可以调到2*s处.现在问小A最少跳多少次才能跳到点e ...

  3. 【最大流】牛棚安排(jzoj 1259)

    牛棚安排 jzoj 1259 题目大意: 有nnn头牛和mmm个牛棚,每头牛有自己第1喜欢,第2喜欢--第mmm喜欢的牛棚(开心度分别为m,m−1,m−2--1m,m-1,m-2--1m,m−1,m− ...

  4. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  5. HDU1548:A strange lift(Dijkstra或BFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...

  6. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  7. usaco Overfencing 穿越栅栏(BFS)

    Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...

  8. 数据结构--搜索BFS

    文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...

  9. 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝

    题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序. 思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步. 剪 ...

最新文章

  1. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  2. linux修改网卡配置不生效怎么解决?
  3. 读书笔记2014年第1本:《赤裸裸的统计学》
  4. 视觉工程师面试指南_选择正确视觉效果的终极指南
  5. Weblogic EJB 学习笔记(2)精
  6. CyberArk:被忽略的特权账号管理已进入蓝海
  7. Java Jvm 中的垃圾回收机制中的思想与算法 《对Java的分析总结》-四
  8. Android 源码分析(三) Service 启动分析
  9. JavaScript—当前时间
  10. java类型转换的要求_java数据类型04_基本数据类型转换
  11. fiddler响应中文乱码问题
  12. 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)
  13. 编译一个java源程序文件,会产生多少个字节码文件
  14. Docker 基础之Dockerfile命令详解
  15. HTML5Canvas实现简易画图工具(铅笔,直线,矩形,圆,文本框,橡皮擦等)
  16. 【填坑日记】list集合的remove方法移除不了?!
  17. 如何卸载有密码保护的Symantec Endpoint Protection v11
  18. C语言:实现勾股定理的运算
  19. ZAC深度解析:区块链技术如何重塑汽车后市场?
  20. DIV+CSS+JS分类显示

热门文章

  1. 数据行列比较多,报表怎么实现锁定行和锁定列呢?
  2. 数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
  3. 【CSS】盒子模型案例 ( 盒子模型尺寸计算 | 盒子模型水平居中 | 盒子模型内外边距设置 | 背景图片及位置设置 | 盒子嵌套设置 )
  4. python单精度和双精度_单精度、双精度、多精度和混合精度计算的区别是什么?...
  5. The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 阅读笔记
  6. MySQL的C/C++的API接口
  7. 金职院计算机网络技术中外合作有什么不一样,重庆电子工程职业学院与加拿大卡纳多文理学院合作办学“计算机网络技术专业”2019级新生开学典礼隆重举行...
  8. ubuntu16.04源码编译linphone库的过程
  9. QComboBox的代理(订制QComboBox组合框)
  10. 怎么设置oracle变量环境变量,window中oracle环境变量设置方法分享