链接: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

输出描述:

一个数ans表示最小步数
输入
16 4
2 10
8 15
12 5
13 6
输出
7 提示:
0-->1-->2-->10-->9-->8-->15-->16
 
题解:一看题目,我就想用BFS做,但是最后却卡在了一个细节上,就是在写check函数的时候,0<a&&a<=n被我写成0<a<=n,这个真的下次得注意了!
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mod 1000000007
#define INF 0x3f3f3f3f
const int N=;
int n,m;
vector<int>s[N];
int ans=INF;
int vis[N][N];
int d[N];
struct niu
{
int x;
int step;
niu(){}
niu(int xt,int st)
{
x=xt,step=st;
}
};
queue<niu>q;
bool check(int a){return <a&&a<=n;}//注意这里不能写成0<a<=n;
void bfs()
{
while(q.size())q.pop();
memset(vis,,sizeof(vis));
q.push(niu(,));
vis[][]=;
while(q.size())
{
niu tmp=q.front();
q.pop();
if(tmp.x==n){
ans=min(ans,tmp.step);
return ;
}
for(int nx: s[tmp.x])
{
if(check(nx)&&vis[nx][tmp.step]==)
{
vis[nx][tmp.step]=;
q.push(niu(nx,tmp.step+)); }
}
int ny=tmp.x+;
if(check(ny)&&vis[ny][tmp.step]==)
{
vis[ny][tmp.step]=;
q.push(niu(ny,tmp.step+)); }
int nz=tmp.x-;
if(check(nz)&&vis[nz][tmp.step]==)
{
vis[nz][tmp.step]=;
q.push(niu(nz,tmp.step+)); }
}
}
int main()
{;
ios_base::sync_with_stdio(); cin.tie();
cin>>n>>m;
int a,b;
for(int i=;i<m;i++)
{
cin>>a>>b;
s[a].push_back(b);
}
/* for(int i=0;i<=n;i++)
for(int j: s[i])
cout<<j<<endl;*/
bfs();
cout<<ans<<endl;
return ;
}

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

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mod 1000000007
#define INF 0x3f3f3f3f
const int N=;
int n,m;
int d[N][N];
void floyed()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
int main()
{ //这里不能在定义一次n,m
ios_base::sync_with_stdio();
cin.tie();
cin>>n>>m;
memset(d,INF,sizeof(d));
for(int i=;i<m;i++)
{
int a,b;
cin>>a>>b;
d[a][b]=;
}
for(int i=;i<=n;i++)
{
d[i][i-]=;
d[i-][i]=;
d[i][i]=;
}
floyed();
cout<<d[][n]<<endl;
return ;
}

牛客网挑战赛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. 汇编语言之寄存器使用bx si di bp

    转载自:https://www.cnblogs.com/youxin/archive/2012/05/29/2524780.html 如果你看到这篇博客时正在做第七章问题,强烈建议先去把8.1~8.4 ...

  2. mysql 8.0.15忘记密码重置方法

    1.打开命令窗口cmd,输入命令:net stop mysql,停止MySQL服务, 2.开启跳过密码验证登录的MySQL服务 输入命令 mysqld --console --skip-grant-t ...

  3. 模板引擎( art-template)

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  4. FY20-ASE 开课!

    自我介绍 我叫陈志锴,undergraduate,pre-phd,初级程序员(c++和c的区别只知道多了类和对象这种,python只会写大作业代码和用基础的neural network框架),曾经跟着 ...

  5. 几张非常有意义的JavaScript基础学习思维图

    分享几张对于学习JavaScript基础知识非常有意义的图,无论你的JavaScript级别如何,“温故而知新”完全可以从这些图中得到. 推荐理由:归类非常好,非常全面 JavaScript 数组 J ...

  6. 新装ubantu 18.04(自用)

    1.下载镜像,制作u盘启动,装机,分区(具体的百度) 2.sudo passwd root     给root用户创建密码 3.解压tar.gz文件 sudo tar -zxvf  pycharm.t ...

  7. 使用字符流(Writer、Reader)完成对文件的读写操作

    字符流 字符输出流:Writer,对文件的操作使用子类FileWriter 字符输入流:Reader,对文件的操作使用子类FileReader 每次操作的是一个字符 文件字符操作流会自带缓存,默认大小 ...

  8. Kafka数据如何同步至MaxCompute之实践讲解

    摘要:本次分享主要介绍Kafka产品的原理和使用方式,以及同步数据到MaxCompute的参数介绍.独享集成资源组与自定义资源组的使用背景和配置方式.Kafka同步数据到MaxCompute的开发到生 ...

  9. Python3解leetcode Binary Tree PathsAdd DigitsMove Zeroes

    问题描述: Given an array nums, write a function to move all 0's to the end of it while maintaining the r ...

  10. LYOI2016 Summer 一次函数 (线段树)

    题目描述 fqk 退役后开始补习文化课啦,于是他打开了数学必修一开始复习函数,他回想起了一次函数都是 f(x)=kx+b的形式,现在他给了你n个一次函数 fi(x)=kix+b,然后将给你m个操作,操 ...