日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

牛客网 最短路 Floyd算法 Dijkstra算法 Java大数

發(fā)布時(shí)間:2024/10/8 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?鏈接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17
來源:牛客網(wǎng)

最短路徑

  • 熱度指數(shù):2992 時(shí)間限制:1秒 空間限制:65536K
  • 算法知識(shí)視頻講解

N個(gè)城市,標(biāo)號(hào)從0到N-1,M條道路,第K條道路(K從0開始)的長(zhǎng)度為2^K,求編號(hào)為0的城市到其他城市的最短距離

輸入描述:

第一行兩個(gè)正整數(shù)N(2<=N<=100)M(M<=500),表示有N個(gè)城市,M條道路 接下來M行兩個(gè)整數(shù),表示相連的兩個(gè)城市的編號(hào)

?

輸出描述:

N-1行,表示0號(hào)城市到其他城市的最短路,如果無法到達(dá),輸出-1,數(shù)值太大的以MOD 100000 的結(jié)果輸出。

示例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();} }

?

總結(jié)

以上是生活随笔為你收集整理的牛客网 最短路 Floyd算法 Dijkstra算法 Java大数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。