• 牛客练习赛24 E:青蛙(最短路)


    https://ac.nowcoder.com/acm/contest/157/E

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

    题目描述

    有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟。于是便开始踏上了旅途

    一直这个小路上有很多的隧道,从隧道的a进入,会从b出来,但是隧道不可以反向走。

    这只青蛙因为太老了,所以很懒,现在想请你帮帮慢,问他最少需要几步才可以到达对面。

    将小径看作一条数轴,青蛙初始在0上,这只青蛙可以向前跳也可以向后跳,但每次只能跳一格,每跳一格记作一步,从隧道进到隧道出算做一步。

    输入描述:

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

    输出描述:

    一个数ans表示最小步数

    示例1

    输入

    复制

    16 4
    2 10
    8 15
    12 5
    13 6

    输出

    复制

    7

    说明

    
     

    0-->1-->2-->10-->9-->8-->15-->16

     可以把相邻的距离看作1,有隧道的距离看为1。

    算出从1到m的最短距离,再加上从0跳到1的一步。

    #include<stdio.h>
    #define N 300
    int e[N][N],book[N],dis[N];
    int mini(int a,int b)
    {
    	return a>b?b:a;
    }
    int main()
    {
    	int i,j,n,m,a,b,u,v,min,ans,inf=99999999;
    	scanf("%d%d",&m,&n);
    	for(i=0;i<=m;i++)
    		for(j=0;j<=m;j++)
    		{
    			if(i==j)
    				e[i][j]=0;
    			else if(i==j-1 || i==j+1)
    				e[i][j]=1;
    			else
    				e[i][j]=inf;
    		}		
    	for(i=0;i<n;i++)
    	{	
    		scanf("%d%d",&a,&b);
    		e[a][b]=1;
    	}
    	for(i=1;i<=m;i++)
    		dis[i]=e[1][i];
    	book[1]=1;
    	for(i=1;i<m;i++)
    	{
    		min=inf;
    		for(j=1;j<=m;j++)
    		{
    			if(book[j]==0 && dis[j] < min)
    			{
    				u=j;
    				min=dis[j];
    			}
    		}
    		book[u]=1;
    		for(v=1;v<=m;v++)
    		{
    			if(e[u][v]<inf && dis[v] > dis[u]+e[u][v])
    				dis[v] = dis[u]+e[u][v];
    		}
    	}	
    	printf("%d
    ",dis[m]+1); 
    	return 0;
    }
  • 相关阅读:
    CentOS7设置开机自启动命令大全
    CentOS查看何人何时登陆用户
    CentOS显示设置时间命令- date
    CentOS系统命令
    CentOS系统中last命令的作用
    CentOS命令top下你不一定懂的cpu显示信息
    CentOS系统安装后的基础优化
    查看CentOS的网络带宽出口
    storm深入研究
    hadoop学习笔记之-hbase完全分布模式安装-5
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852802.html
Copyright © 2020-2023  润新知