背景

农民John有很多牛,他想交易其中一头被Don称为The Knight的牛。这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法)。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个x,y的坐标图来表示。

描述

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。现在你的任务是,确定The Knight要想吃到草,至少需要跳多少次。The Knight的位置用'K'来标记,障碍的位置用'*'来标记,草的位置用'H'来标记。

这里有一个地图的例子:
             11 | . . . . . . . . . .
             10 | . . . . * . . . . . 
              9 | . . . . . . . . . . 
              8 | . . . * . * . . . . 
              7 | . . . . . . . * . . 
              6 | . . * . . * . . . H 
              5 | * . . . . . . . . . 
              4 | . . . * . . . * . . 
              3 | . K . . . . . . . . 
              2 | . . . * . . . . . * 
              1 | . . * . . . . * . . 
              0 ----------------------
                                    1 
                0 1 2 3 4 5 6 7 8 9 0

The Knight 可以按照下图中的A,B,C,D...这条路径用5次跳到草的地方(有可能其它路线的长度也是5):
             11 | . . . . . . . . . .
             10 | . . . . * . . . . .
              9 | . . . . . . . . . .
              8 | . . . * . * . . . .
              7 | . . . . . . . * . .
              6 | . . * . . * . . . F<
              5 | * . B . . . . . . .
              4 | . . . * C . . * E .
              3 | .>A . . . . D . . .
              2 | . . . * . . . . . *
              1 | . . * . . . . * . .
              0 ----------------------
                                    1
                0 1 2 3 4 5 6 7 8 9 0

输入格式

第一行: 两个数,表示农场的列数(<=150)和行数(<=150)

第二行..结尾: 如题目描述的图。

输出格式

一个数,表示跳跃的最小次数。

测试样例1

输入

10 11 
.......... 
....*..... 
.......... 
...*.*.... 
.......*.. 
..*..*...H 
*......... 
...*...*.. 
.K........ 
...*.....* 
..*....*..

输出

5

备注

Hint:这类问题可以用一个简单的先进先出表(队列)来解决。usaco nov09 Cu 
 

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. struct cc{
  9. int x,y;
  10. }que1;
  11.  
  12. char juzhen[][];
  13. int x,y,n,m,ans,
  14. dx[]={,,-,-,,,-,-},
  15. dy[]={,-,,-,,-,,-},
  16. map[][];
  17. queue<cc> que;
  18.  
  19. void print(){
  20. for(int i=;i<=m;i++) {
  21. for(int j=;j<=n;j++){
  22. printf("%d",map[i][j]);
  23. }
  24. puts("");
  25. }
  26. puts("");
  27. }
  28.  
  29. int main(){
  30. // freopen("01.txt","r",stdin);
  31. scanf("%d%d",&n,&m);//横n 竖m
  32. for(int i=;i<=m;i++) {
  33. for(int j=;j<=n;j++){
  34. cin>>juzhen[i][j];
  35. // scanf("%c",juzhen[i][j]);
  36. if(juzhen[i][j]=='K') {x=i;y=j;}
  37. }
  38. }
  39.  
  40. // print();
  41. cc c1;c1.x=x;c1.y=y;
  42. que.push(c1);
  43. map[x][y]=;
  44. while(!que.empty()){
  45. que1=que.front();que.pop();
  46. for(int i=;i<;i++){
  47. int xx=que1.x+dx[i],yy=que1.y+dy[i];
  48. if(xx<||yy<||xx>m||yy>n) continue;
  49. if(map[xx][yy]>) continue;
  50. if(juzhen[xx][yy]=='*') continue;
  51. if(juzhen[xx][yy]=='H'){
  52. ans=map[que1.x][que1.y];
  53. // cout<<xx<<' '<<yy<<endl;
  54. while(!que.empty()) que.pop();
  55. break;
  56. }
  57. map[xx][yy]=map[que1.x][que1.y]+;
  58. cc que2;que2.x=xx;que2.y=yy;
  59. que.push(que2);
  60. }
  61. // print();
  62.  
  63. }
  64. printf("%d\n",ans);
  65. return ;
  66. }

测试代码没删掉,勿喷

n和m老是搞反,很不爽

还有就是37行求‘K’坐标没加括号,导致y永远不对

另外这样输入只能一整行或字符串地读,或者用cin

为了方便取‘K’我用的是cin

TYVJ P1074 武士风度的牛 Label:跳马问题的更多相关文章

  1. TYVJ 1074 武士风度的牛

    easy BFS 注意输入是反的就OK了 #include <cstdio> #include <iostream> #include <queue> using ...

  2. TYVJ P1030 乳草的入侵 Label:跳马问题

    背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份佔领了一 ...

  3. CH2906 武士风度的牛(算竞进阶习题)

    水..... 直接bfs... #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef l ...

  4. 带你学习Flood Fill算法与最短路模型

    一.Flood Fill(连通块问题) 0.简介 Flood Fill(洪水覆盖) 可以在线性的时间复杂内,找到某个点所在的连通块! 注:基于宽搜的思想,深搜也可以做但可能会爆栈 flood fill ...

  5. AcWing 【算法提高课】笔记02——搜索

    搜索进阶 22.4.14 (PS:还有 字串变换 A*两题 生日蛋糕 回转游戏 没做) 感觉暂时用不上 BFS 1. Flood Fill 在线性时间复杂度内,找到某个点所在的连通块 思路 统计连通块 ...

  6. 洛谷 P2737 [USACO4.1]麦香牛块Beef McNuggets Label:一点点数论 && 背包

    题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”奶牛们说,“如 ...

  7. TYVJ P1015 公路乘车 &&洛谷 P1192 台阶问题 Label:dp

    题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式. 输入输出格式 输入格式: 输入文件的仅包含两个正整数N,K. 输出格式: 输入文件s ...

  8. TYVJ P1032 零用钱 Label:贪心

    背景 USACO OCT09 7TH 描述 作為创造產奶纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱. FJ有一些硬币,一共有N (1 <= N <= 20) ...

  9. TYVJ P1075 硬币游戏 Label:dp

    背景 农民John的牛喜欢玩硬币,所以John就为它们发明了一个新的两人硬币游戏,叫做Xoinc. 描述 最初地面上有一堆n个硬币(5<=n<=2000),从上面数第i个硬币的价值为C_i ...

随机推荐

  1. Vmware虚拟机

    1.在虚拟机安装完系统后找到相对应的保存路径如:D:\VMware\VOS\Win7x64OS 2.该目录下面会有很多文件和文件夹,其中配置文件Windows 7 x64.vmx和硬盘文件Window ...

  2. 用php实现百度网盘图片直链的代码分享

    第一种代码:代码量较少通过正则表达式获取百度网盘的文件真实地址,来实现直链的效果 将下面的代码保存为downbd.php 复制代码代码如下: <?php $canshu=$_SERVER[&qu ...

  3. vi命令的基础知识

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,先说说一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您 ...

  4. php中常用魔术方法的举例

    魔术方法是php面向对象特有的功能,并且有时候能实现意想不到的效果,包括前面提到的构造函数.析构函数.还有__clone函数,另外再简单的介绍几个: 1.__toSring和__invoke clas ...

  5. Java for LeetCode 171 Excel Sheet Column Number

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...

  6. HDU4870 Rating(概率)

    第一场多校,感觉自己都跳去看坑自己的题目里去了,很多自己可能会比较擅长一点的题目没看,然后写一下其中一道概率题的题解吧,感觉和自己前几天做的概率dp的思路是一样的.下面先来看题意:一个人有两个TC的账 ...

  7. MST:Roadblocks(POJ 3255)

       路上的石头 题目大意:某个街区有R条路,N个路口,道路双向,问你从开始(1)到N路口的次短路经长度,同一条边可以经过多次. 这一题相当有意思,现在不是要你找最短路径,而是要你找次短路经,而且次短 ...

  8. c++流的读写

    std::istream input_stream;//这是一个文件流,想把它写入文件 思路是,先将input_stream流读入一个char* buffer; 然后用std::ofstream将bu ...

  9. 安装chocolatey

    C:\> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.web ...

  10. Redis适用于高并发的递增、递减功能

    递增指令:incr(默认从0开始) 递减指令:decr(默认从0开始,递减会出现负数,这点跟memcache不一样,mc到0) 如下: 附上shardedJedisPool和JedisCluster的 ...