这是Dijkstra算法的高配版
(╯▔皿▔)╯其实就是可以打印出来所走的路径啦~
找图上的某个点到其余点的最短路径
Dijkstra算法的思想:
1.将所有的点分为两种,走过的点和没走过的点
首先,原点标记为走过的第一个点,没走过的点的距离值为正无穷
看原点可以走到哪些点,将这些点的前驱改为原点
2.找到下一个可以作为原点的点:
在没走过的点中找到当前路径最短的点作为下一个原点
从这个原点看能走到哪些点并且比较
当前原点距离值加上原点到那个点的距离值与那个点的距离值作比较,如果要小于则替换那个点的距离值为原点距离值到当前点距离值之和
那个点的前驱改为当前原点
3.重复2的步骤直到所有的点都走过了
package GraphHomework;
import java.util.ArrayList;
public class GraphHomework {
public void Dijkstrate(int [][] r,int [][] w,int n,int k)
{
// r数组用来储存邻接矩阵,w数组用来储存距离,n是节点的个数,用来建立相应数组的大小,k是从第几个节点开始。
int[] v=new int [n];//顶点的数组
int[] pre=new int [n];//储存前驱
boolean gone[]=new boolean[n];//用来储存当前节点是否已经走过了
//初始化
for(int i=0;i<n;i++)
{
v[i]=Integer.MAX_VALUE;
pre[i]=0;
gone[i]=false;