Dijkstra(迪杰斯特拉)算法
来源:互联网 发布:淘宝南极人袜子怎么样 编辑:程序博客网 时间:2024/06/02 03:31
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
求最短路径步骤
算法步骤如下:
1. 初使时令 S={V0},T={其余顶点},T中顶点对应的距离值
若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值
若不存在<V0,Vi>,d(V0,Vi)为∝
2. 从T中选取一个其距离值为最小的顶点W且不在S中,加入S
3. 对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的
距离值比不加W的路径要短,则修改此距离值
重复上述步骤2、3,直到S中包含所有顶点,即S=T为止
package com.minPath;
import java.util.Scanner;
public class DjistraPath {
public static int cityNum;//行数
public static int line;
public static int bigNum=10000;//
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
cityNum=scanner.nextInt();
line=scanner.nextInt();
int[][] matrix=new int[cityNum][cityNum];
int[] dist=new int[cityNum];//用于记录0到其他节点的距离
boolean[] flag=new boolean[cityNum];//用于标记节点是否被访问
for(int i=0;i<cityNum;i++)//初始化
for(int j=0;j<cityNum;j++){
if(i==j)
matrix[i][j]=0;
else
matrix[i][j]=bigNum;
}
for(int k=0;k<line;k++){
int row=scanner.nextInt();
int col=scanner.nextInt();
int value=scanner.nextInt();
matrix[row][col]=value;
}
for(int k=0;k<cityNum;k++){
dist[k]=matrix[0][k];
flag[k]=false;//默认都没有访问
}
for(int k=0;k<cityNum;k++){
System.out.print(" dist"+k+"--"+dist[k]);
}
System.out.println();
int index=0;
flag[0]=true;//默认第一个点已经访问
int min;
for(int i=0;i<cityNum-1;i++){//经过cityNum趟
min=bigNum;
for(int w=0;w<cityNum;w++){//没有访问的最小的标记为访问过的
if(flag[w]==false){
if(dist[w]<min){
index=w;
min=dist[w];
}
}
}
System.out.println("index---"+index);
flag[index]=true;
System.out.println("pre dist[3]"+dist[3]+" dist[1]"+dist[1]+" matrix[1][3]"+matrix[1][3]);
for(int j=0;j<cityNum;j++){
if(flag[j]==false && (dist[j]>dist[index]+matrix[index][j])){
dist[j]=dist[index]+matrix[index][j];
}
// System.out.print(" 跟新---dist("+j+")--"+dist[j]);
}
System.out.println("pre dist[3]"+dist[3]+" dist[1]"+dist[1]+" matrix[1][3]"+matrix[1][3]);
System.out.println();
}
System.out.println("----------");
for(int i=0;i<cityNum;i++){
for(int j=0;j<cityNum;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
for(int s=1;s<cityNum;s++){
System.out.println("0----->"+s+":"+dist[s]);
}
}
}
- /*
- Test Date:
- 5 7
- 0 1 3
- 0 3 8
- 1 2 5
- 1 4 4
- 2 3 4
- 2 4 7
- 3 4 2
- Out put:
- 0->1:3
- 0->2:8
- 0->3:8
- 0->4:7
- */
- 迪杰斯特拉算法(Dijkstra算法)
- 迪杰斯特拉算法 Dijkstra算法
- 迪杰斯特拉算法【Dijkstra】
- Dijkstra(迪杰斯特拉)算法
- Dijkstra 迪杰斯特拉算法
- DIJKSTRA迪杰斯特拉算法
- Dijkstra(迪杰斯特拉)算法
- 迪杰斯特拉算法原理(Dijkstra)
- Dijkstra(迪杰斯特拉)算法
- 迪杰斯特拉(dijkstra)算法详解
- 迪杰斯特拉(Dijkstra)算法
- Dijkstra(迪杰斯特拉)算法
- Dijkstra(迪杰斯特拉)算法
- Dijkstra(迪杰斯特拉)算法
- Dijkstra(迪杰斯特拉)算法
- Dijkstra迪杰斯特拉算法+贪心
- Dijkstra(迪杰斯特拉)算法
- Dijkstra算法(迪杰斯特拉)
- 线程基础:多任务处理(12)——Fork/Join框架(基本使用)
- gmapping源码分析以及收获
- DECLARE_META_INTERFACE(INTERFACE)和IMPLEMENT_META_INTERFACE(INTERFACE, NAME)宏定义分析
- PLC实验五(LED数码管显示控制)
- itellij idea导入web项目并部署到tomcat
- Dijkstra(迪杰斯特拉)算法
- JS学习九----JSON
- Ajax的概述
- MongoDB 文档的更新操作
- 适配器模式
- Android Color(颜色)解析
- Fragment
- 日常记录
- org.apache.catalina.core.ContainerBase.startInternal A child container failed during start