链接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17
来源:牛客网

最短路径

  • 热度指数:2992 时间限制:1秒 空间限制:65536K
  • 算法知识视频讲解

N个城市,标号从0到N-1,M条道路,第K条道路(K从0开始)的长度为2^K,求编号为0的城市到其他城市的最短距离

输入描述:

第一行两个正整数N(2<=N<=100)M(M<=500),表示有N个城市,M条道路
接下来M行两个整数,表示相连的两个城市的编号

输出描述:

N-1行,表示0号城市到其他城市的最短路,如果无法到达,输出-1,数值太大的以MOD 100000 的结果输出。

示例1

输入

4 4
1 2
2 3
1 3
0 1

输出

8
9
11

Floyd算法

import java.util.*;
import java.math.*;
public class Main{static int maxn=(int)(100+10);static BigInteger MOD =new BigInteger("100000");static String INF="";static BigInteger[][] map=new BigInteger[maxn][maxn];static int n,m;static BigInteger base=new BigInteger("2");static void init() {for(int i=0;i<=n;i++) {for(int j=0;j<=n;j++) {if(i!=j)map[i][j]=new BigInteger(INF);elsemap[i][j]=new BigInteger("0");}}}static void floyd() {for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(map[i][j].compareTo(map[i][k].add(map[k][j]))>0)map[i][j]=map[i][k].add(map[k][j]);}public static void main(String[] args) {Scanner cin=new Scanner(System.in);for(int i=0;i<=160;i++)//2^500=10^155;INF+="9";while(cin.hasNext()) {n=cin.nextInt();m=cin.nextInt();init();        for(int k=0;k<m;k++) {int u=cin.nextInt();int v=cin.nextInt();if(!map[u][v].toString().equals(INF)) continue;map[u][v]=map[v][u]=new BigInteger( base.pow(k).toString());}floyd();for(int i=1;i<n;i++) {BigInteger d=map[0][i];if(d.toString().equals(INF))System.out.println("-1");elseSystem.out.println(d.mod(MOD));}}cin.close();}
}

Dijkstra算法

import java.util.*;
import java.math.*;
public class Main{static int maxn=(int)(100+10);static int n,m;static BigInteger MOD =new BigInteger("100000");static String INF="";static BigInteger[][] map=new BigInteger[maxn][maxn];static BigInteger base=new BigInteger("2");static void init() {for(int i=0;i<=n;i++) {for(int j=0;j<=n;j++) {if(i!=j)map[i][j]=new BigInteger(INF);elsemap[i][j]=new BigInteger("0");}}}static BigInteger[] dis=new BigInteger[maxn];static boolean[] vis =new boolean[maxn];static void dijkstra(int start) {for(int i=0;i<n;i++) {dis[i]=map[start][i];vis[i]=false;}dis[start]=new BigInteger("0");vis[start]=true;for(int i=0;i<n-1;i++) {int k=-1;BigInteger minD=new BigInteger(INF);for(int j=0;j<n;j++) {if(!vis[j]&&dis[j].compareTo(minD)<0) {minD=dis[j];k=j;}}if(k==-1)  break;vis[k]=true;for(int j=0;j<n;j++) {if(!vis[j]&&dis[j].compareTo(dis[k].add(map[k][j]))>0)dis[j]=dis[k].add(map[k][j]);}}}public static void main(String[] args) {Scanner cin=new Scanner(System.in);for(int i=0;i<=160;i++)INF+="9";while(cin.hasNext()) {n=cin.nextInt();m=cin.nextInt();init();     for(int k=0;k<m;k++) {int u=cin.nextInt();int v=cin.nextInt();if(!map[u][v].toString().equals(INF)) continue;map[u][v]=map[v][u]=new BigInteger( base.pow(k).toString());}dijkstra(0);for(int i=1;i<n;i++) {BigInteger d=dis[i];if(d.toString().equals(INF))System.out.println("-1");elseSystem.out.println(d.mod(MOD));}}cin.close();}
}

牛客网 最短路 Floyd算法 Dijkstra算法 Java大数相关推荐

  1. 【牛客网刷题】中秋节前开启java专项练习错题总结第一天

    [牛客网刷题]中秋节前开启java专项练习错题总结第一天 概述 写在前面 错题分析 值得记录的错题 总结 写在最后 概述 还有十几天就到中秋节了,从此又老了一岁,也多了一年的知识积累.对于这样一个特殊 ...

  2. 【牛客网】:数据结构——时间复杂度,算法复杂度

    目录 一.时间复杂度 二.算法复杂度 一.时间复杂度  先看一张图: (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机 ...

  3. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) H.了断局-递推

    H.了断局 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://www.nowcode ...

  4. 牛客网 2018年全国多校算法寒假训练营练习比赛(第三场)D.小牛vs小客-博弈

    菜哭... D.小牛vs小客 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://ww ...

  5. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) H.Tree Recovery-完全版线段树(区间更新、区间求和)...

    H.Tree Recovery 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 链接:https:/ ...

  6. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) A.吐泡泡-STL(stack)

    不好玩,一堆板子,太菜了,被打爆了,B一直wa60%,D一直wa80%,D改了多组输入就过了... A.吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  7. 牛客网2018年全国多校算法寒假训练营练习比赛(第二场)

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

  8. 牛客网 2018年全国多校算法寒假训练营练习比赛(第一场) 题解

    A-大吉大利,今晚吃鸡--枪械篇 题目描述 在绝地求生(吃鸡)游戏里,不同的枪支有不同的威力,更是可以搭配不同的配件,以提升枪支的性能. 每一把枪都有其威力及其可装备配件种类.每一个配件有其所属种类, ...

  9. 牛客网 间单排序(LIS算法)

    链接:https://ac.nowcoder.com/acm/contest/547/F 来源:牛客网 题目描述 LXK有一个序列,从N~1,但是他不小心把序列打乱了,现在他想找你把这串序列复原. 他 ...

最新文章

  1. cocos2d-js 自定义事件监听派发
  2. python编程300例_经典编程100例——python版(例9例10)
  3. [Android Studio] 初体验
  4. java实现js取反_特定位取反(js实现)
  5. Java 比特币开发系列教程汇总
  6. java 调用js 解析yml_nodejs库yaml读取yml或yaml配置文件
  7. Velocity 语法示例
  8. 马斯克回应一切:2018年极其痛苦,福特难熬下次经济衰退,后悔发太多推特
  9. 前端安全问题的解决方法
  10. msi主板B460 uefi+gpt安装win10
  11. 高德地图开放平台的使用
  12. oracle ebs 提交请求,EBS Form开发中点击按钮提交请求报表的实现方式--fnd_request.submit_request...
  13. 【测绘程序设计】坐标方位角推算神器(C#版)
  14. 比较两条曲线的相似程度
  15. Yocto OpenCV交叉编译
  16. 关于支付宝CertificateException: X.509 not found的那些事~づ♡ど,JDK同样的版本之间也会有问题!
  17. 苹果笔记本电脑运行win系统时温度过高解决办法
  18. VLOOKUP命令不生效的坑
  19. 思科Cisco packet tracer的实验之两个简单网络连接
  20. 网页端显示中文乱码问题

热门文章

  1. C++将类的构造函数、析构函数声明为private或者protected的用途
  2. 利用bind搭建dns
  3. centos7.0 没有netstat 和 ifconfig命令问题
  4. 正则表达式学习 (一) 转
  5. 让人生成功的49个细节
  6. 报错 插入更新_自增主键,三类插入测验答案,在这里。
  7. mysql data目录 说明_mysql 更改数据目录
  8. python获取输入框内容长度_python3 tkinter 获取输入字符串长度
  9. java堆设置成多少合适_jvm~xmx设置多少合适
  10. mysql 常用小工具包_mssql+mysql小工具(无需环境依赖)-mysql数据库批量实体CS类导出工具下载v3.0免费版-西西软件下载...