链接:https://www.nowcoder.com/acm/contest/157/E
来源:牛客网

有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟。于是便开始踏上了旅途 一直这个小路上有很多的隧道,从隧道的a进入,会从b出来,但是隧道不可以反向走。 这只青蛙因为太老了,所以很懒,现在想请你帮帮慢,问他最少需要几步才可以到达对面。 将小径看作一条数轴,青蛙初始在0上,这只青蛙可以向前跳也可以向后跳,但每次只能跳一格,每跳一格记作一步,从隧道进到隧道出算做一步。

输入描述:
第一行两个数m,n;表示黑色物品在数轴m点上,数轴上总共有n个隧道接下来n行,每行a,b两个数,表示从a进会从b出10 <= m,n <= 2330<a,b<=m

输出描述:

  1. 一个数ans表示最小步数
    输入
    16 4
    2 10
    8 15
    12 5
    13 6
    输出
    7
  2.  
  3. 提示:
0-->1-->2-->10-->9-->8-->15-->16
 
题解:一看题目,我就想用BFS做,但是最后却卡在了一个细节上,就是在写check函数的时候,0<a&&a<=n被我写成0<a<=n,这个真的下次得注意了!
代码:
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned long long ull;
  5. #define mod 1000000007
  6. #define INF 0x3f3f3f3f
  7. const int N=;
  8. int n,m;
  9. vector<int>s[N];
  10. int ans=INF;
  11. int vis[N][N];
  12. int d[N];
  13. struct niu
  14. {
  15. int x;
  16. int step;
  17. niu(){}
  18. niu(int xt,int st)
  19. {
  20. x=xt,step=st;
  21. }
  22. };
  23. queue<niu>q;
  24. bool check(int a){return <a&&a<=n;}//注意这里不能写成0<a<=n;
  25. void bfs()
  26. {
  27. while(q.size())q.pop();
  28. memset(vis,,sizeof(vis));
  29. q.push(niu(,));
  30. vis[][]=;
  31. while(q.size())
  32. {
  33. niu tmp=q.front();
  34. q.pop();
  35. if(tmp.x==n){
  36. ans=min(ans,tmp.step);
  37. return ;
  38. }
  39. for(int nx: s[tmp.x])
  40. {
  41. if(check(nx)&&vis[nx][tmp.step]==)
  42. {
  43. vis[nx][tmp.step]=;
  44. q.push(niu(nx,tmp.step+));
  45.  
  46. }
  47. }
  48. int ny=tmp.x+;
  49. if(check(ny)&&vis[ny][tmp.step]==)
  50. {
  51. vis[ny][tmp.step]=;
  52. q.push(niu(ny,tmp.step+));
  53.  
  54. }
  55. int nz=tmp.x-;
  56. if(check(nz)&&vis[nz][tmp.step]==)
  57. {
  58. vis[nz][tmp.step]=;
  59. q.push(niu(nz,tmp.step+));
  60.  
  61. }
  62. }
  63. }
  64. int main()
  65. {;
  66. ios_base::sync_with_stdio(); cin.tie();
  67. cin>>n>>m;
  68. int a,b;
  69. for(int i=;i<m;i++)
  70. {
  71. cin>>a>>b;
  72. s[a].push_back(b);
  73. }
  74. /* for(int i=0;i<=n;i++)
  75. for(int j: s[i])
  76. cout<<j<<endl;*/
  77. bfs();
  78. cout<<ans<<endl;
  79. return ;
  80. }

这道题也可以用最短路floyed算法做(这种做法我又犯了一个错误,n,m定义全局变量后,又在下面定义成局部变量,这使得调用floyed函数时出错)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned long long ull;
  5. #define mod 1000000007
  6. #define INF 0x3f3f3f3f
  7. const int N=;
  8. int n,m;
  9. int d[N][N];
  10. void floyed()
  11. {
  12. for(int k=;k<=n;k++)
  13. for(int i=;i<=n;i++)
  14. for(int j=;j<=n;j++)
  15. d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
  16. }
  17. int main()
  18. { //这里不能在定义一次n,m
  19. ios_base::sync_with_stdio();
  20. cin.tie();
  21. cin>>n>>m;
  22. memset(d,INF,sizeof(d));
  23. for(int i=;i<m;i++)
  24. {
  25. int a,b;
  26. cin>>a>>b;
  27. d[a][b]=;
  28. }
  29. for(int i=;i<=n;i++)
  30. {
  31. d[i][i-]=;
  32. d[i-][i]=;
  33. d[i][i]=;
  34. }
  35. floyed();
  36. cout<<d[][n]<<endl;
  37. return ;
  38. }

牛客网挑战赛24 青蛙(BFS)的更多相关文章

  1. 牛客网挑战赛19 B,C,F

    链接:https://www.nowcoder.com/acm/contest/131/B来源:牛客网 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子矩阵,使得这 ...

  2. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

  3. 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数

      C.列一列   时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...

  4. 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)

    链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  5. 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)

    前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...

  6. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

  7. 牛客网 Wannafly挑战赛27 蓝魔法师

    蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...

  8. 牛客网 Wannafly挑战赛8 B.LBJX的三角形

    B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...

  9. 牛客网 Wannafly挑战赛11 B.白兔的式子-组合数阶乘逆元快速幂

    链接:https://www.nowcoder.com/acm/contest/73/B来源:牛客网 B.白兔的式子   时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K, ...

随机推荐

  1. parse_str()和http_build_query()的使用

    <?php $_html = array(); $_html['action1'] = 'action1'; $_html['action2'] = 'action2'; echo http_b ...

  2. python 类的私有属性和方法 (转载)

    转载:http://www.runoob.com/python/python-object.html 类属性与方法 类的私有属性 __private_attrs:两个下划线开头,声明该属性为私有,不能 ...

  3. React(7) --react父子组件传参

    react父子组件传参 父级向子级传参:在父组件中,我们引入子组件,通过给子组件添加属性,来起到传参的作用,子组件可以通过props获取父组件传过来的参数. 在父组件中: import React f ...

  4. 初学Java 数值运算符

    import java.util.Scanner; public class DisplayTime { public static void main(String[] args) { Scanne ...

  5. 《x的奇幻之旅》:有趣的数学科普

    本书是相对比较少见的数学方面的科普书.从最简单的阿拉伯数字.加减法,一直到概率统计.微积分.群论.拓扑.微分几何,每个主题都用几千字做一些深入浅出的介绍.写的相当的有趣. 在书中又一次看到这个有趣的事 ...

  6. vue-如何输出Hello world

    首先引入vue.js文件 <script src="vue.js"></script> <!DOCTYPE html> <html> ...

  7. mongodb 多表关联处理 : 内嵌以及连接(手动引用、DBref) 、aggregate中$lookup

    MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型.MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link).那么何时Embed何时Li ...

  8. ERROR=(CODE=1153)

    jdbc 连接oracle数据库(10.2.0.4),应用程序报错如下: Connection refused(DESCRIPTION=(ERR=1153)(VSNNUM=169870592)(ERR ...

  9. 【学习笔记】圆方树(CF487E Tourists)

    终于学了圆方树啦~\(≧▽≦)/~ 感谢y_immortal学长的博客和帮助 把他的博客挂在这里~ 点我传送到巨佬的博客QwQ! 首先我们来介绍一下圆方树能干什么呢qwq 1.将图上问题简化到树上问题 ...

  10. IOC(控制反转)和DI(依赖注入)

    IOC(控制反转): 那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所.婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友 ...