Dijkstra最短路径(Java)(详细+模板)

简介: Dijkstra最短路径(Java)(详细+模板)

思路:

首先使用数组存储,从起点开始找距离起点最近的点t,然后以t为中间点修正从起点到未访问各点的距离,以上操作执行n次。

代码:

package text2;

import java.util.*;
import java.io.*;
public class Dijkstra {
  static int n,m;
  static int g[][] = new int[10005][10005];//存放图
//  static int dis[] = new int[n];//起点到每个点的最短距离
  static int vis[] = new int[10005];//是否被标记过
  
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scanner = new Scanner(System.in);
    n = scanner.nextInt();//顶点数
    m = scanner.nextInt();//边数
    int s = scanner.nextInt();//图的起点
//    Arrays.fill(dis, 0x3f3f3f3f);
    for (int i = 0; i < n; i++) {
      Arrays.fill(g[i], 0x3f3f3f3f);
      g[i][i]=0;
    }
    Arrays.fill(vis, 0);
    for(int i=0;i<m;i++) {
      int v1=scanner.nextInt();
      int v2=scanner.nextInt();
      int weight=scanner.nextInt();
      g[v1][v2]=weight;
      g[v2][v1]= weight; 
    }
    dijkstra(0);
    System.out.print(g[0][2]);
  }
  //固定模板
  public static void dijkstra(int s) {
    for(int i=0;i<n;i++) {
      int t=-1;
      int min = 0x3f3f3f3f;
      //找距离起点最近的一个点t(而且未被访问过)
      for(int j=0;j<n;j++) {
        if(vis[j]==0&&(t==-1||g[s][j]<min)) {
          min = g[s][j];
          t = j;
        }
      }
      vis[t] = 1;
      //以u为中间点,修正从【起点s】到未访问各点的距离 
      for(int j=0;j<n;j++) {
        if(vis[j]==0) {
          if(g[s][t]+g[t][j]<g[s][j]) {
            g[s][j] = g[s][t]+g[t][j];
            //此处还可以加路径
          }
        }
      }
    }
  }
}

相关文章
|
19天前
|
小程序 Java
【aspose-words】Aspose.Words for Java模板语法详细剖析
本文通过详细分析Aspose.Words for Java模板语法,介绍了使用条件块、变量和动态合并表格单元格三个常用模板标签,并结合实际案例进行演示。通过这三个标签的实操,帮助读者更好地掌握Aspose.Words的使用技巧。此外,还提供了官方文档链接以便进一步学习。
59 0
【aspose-words】Aspose.Words for Java模板语法详细剖析
|
28天前
|
Java
Java系列之 IDEA 为类 和 方法设置注解模板
这篇文章介绍了如何在IntelliJ IDEA中为类和方法设置注解模板,包括类模板的创建和应用,以及两种不同的方法注解模板的创建过程和实际效果展示,旨在提高代码的可读性和维护性。
|
17天前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
56 0
|
26天前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
|
2月前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
41 3
|
2月前
|
存储 Java 应用服务中间件
Java中套路和实现问题之基于组合/模板的套路常见框架中的应用有什么
Java中套路和实现问题之基于组合/模板的套路常见框架中的应用有什么
|
3月前
|
算法 Java 数据处理
Java算法模板 数据流快读
Java算法模板 数据流快读
23 2
|
3月前
|
Java
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
|
3月前
|
Java Maven 开发者
java一分钟之-Maven Archetypes:项目模板
【6月更文挑战第6天】Maven Archetypes是Java开发中用于快速创建项目模板的工具,简化项目初始化。它们定义了项目结构、必备文件和默认配置。使用Archetypes能实现快速启动、保持项目一致性并易于扩展。常见问题包括查找和使用Archetype、理解项目结构及pom.xml配置。通过命令行工具`mvn archetype:generate`可生成项目,例如使用`maven-archetype-quickstart`创建简单Java应用。熟悉Archetypes能提升开发效率,但也需根据实际需求调整生成的配置。
139 5
|
3月前
|
算法 Java
JAVA中实现最短距离算法——Dijkstra算法详解
JAVA中实现最短距离算法——Dijkstra算法详解
65 1