题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26766

思路:由于数据不是很大,我们可以枚举骑士最后聚集的位置,然后枚举的时候用bfs搜索即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<vector>
  7. using namespace std;
  8. #define MAXN 14
  9.  
  10. struct Node{
  11. int x,y,step;
  12. Node(){}
  13. Node(int _x,int _y,int _step):x(_x),y(_y),step(_step){}
  14. };
  15. int n,m,min_step;
  16. char map[MAXN][MAXN];
  17. bool mark[MAXN][MAXN];
  18. int dir[][]={{,},{,-},{,},{,-},{-,},{-,-},{-,},{-,-}};
  19. vector<pair<int,pair<int,int> > >g;
  20.  
  21. int bfs(Node &st,Node &ed)
  22. {
  23. memset(mark,false,sizeof(mark));
  24. queue<Node>que;
  25. que.push(st);
  26. mark[st.x][st.y]=true;
  27. while(!que.empty()){
  28. Node q,p=que.front();
  29. que.pop();
  30. if(p.x==ed.x&&p.y==ed.y){
  31. return p.step;
  32. }
  33. for(int i=;i<;i++){
  34. q.x=p.x+dir[i][];
  35. q.y=p.y+dir[i][];
  36. if(q.x>=&&q.x<n&&q.y>=&&q.y<m&&!mark[q.x][q.y]){
  37. mark[q.x][q.y]=true;
  38. q.step=p.step+;
  39. que.push(q);
  40. }
  41. }
  42. }
  43. return -;
  44. }
  45.  
  46. void Solve()
  47. {
  48. min_step=;
  49. for(int i=;i<n;i++){
  50. for(int j=;j<m;j++){
  51. bool flag=true;
  52. int step=;
  53. for(int k=;k<g.size();k++){
  54. Node st,ed;
  55. int kk=g[k].first;//骑士的种类
  56. st.x=g[k].second.first,st.y=g[k].second.second,st.step=;
  57. ed.x=i,ed.y=j;
  58. int dd=bfs(st,ed);
  59. if(dd==-){ flag=false;break; }
  60. step+=(dd+kk-)/kk;
  61. }
  62. if(flag)min_step=min(min_step,step);
  63. }
  64. }
  65. if(min_step==){
  66. puts("-1");
  67. }else
  68. printf("%d\n",min_step);
  69. }
  70.  
  71. int main()
  72. {
  73. int _case,t=;
  74. scanf("%d",&_case);
  75. while(_case--){
  76. scanf("%d%d",&n,&m);
  77. g.clear();
  78. for(int i=;i<n;i++){
  79. scanf("%s",map[i]);
  80. for(int j=;j<m;j++){
  81. if(map[i][j]>=''&&map[i][j]<='')g.push_back((make_pair(map[i][j]-'',make_pair(i,j))));
  82. }
  83. }
  84. printf("Case %d: ",t++);
  85. Solve();
  86. }
  87. return ;
  88. }

loj 1046(bfs)的更多相关文章

  1. nyoj 21三个水杯(BFS + 栈)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...

  2. POJ3279 Catch That Cow(BFS)

    本文来源于:http://blog.csdn.net/svitter 意甲冠军:给你一个数字n, 一个数字k.分别代表主人的位置和奶牛的位置,主任能够移动的方案有x+1, x-1, 2*x.求主人找到 ...

  3. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  4. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  5. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  6. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  7. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  8. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  9. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

随机推荐

  1. iOS-UIView category

    UIView+Extension.h #import <UIKit/UIKit.h> @interface UIView (Extension) @property (nonatomic, ...

  2. 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  3. Lamp学习笔记

    1,php.ini 文件在哪里  /opt/app/php-5.3/etc/php.ini  --------------------------------------------   2014-0 ...

  4. logback 项目应用

    1.gradle引用: compile group: 'commons-logging', name: 'commons-logging', version: '1.1.3' compile grou ...

  5. Spring AOP使用整理:自动代理以及AOP命令空间

    三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframe ...

  6. java笔记--适配器模式的运用

    适配器模式的运用 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884785.html "谢谢-- 主要应用: 可以在符合 ...

  7. Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加 ...

  8. Android第三方jar包ClassNotFind

    转载请注明http://www.cnblogs.com/vanezkw/archive/2012/06/25/2561393.html 相信很多朋友在使用第三方包时都遇到过此类问题.今天就此问题进行一 ...

  9. git初学者这样就行了。

    Create a new repository on the command line touch README.md git init git add README.md git commit -m ...

  10. Linux rpm安装问题解决

    1.安装时提示:warning: *.rpm: Header V3 RSA/SHA256 Signature, keykey ID c105b9de: NOKEY 解决的方法就是在rpm 语句后面加上 ...