单源最短路径_贪心算法

原创 2012年03月22日 18:15:33
public class TheShortestWay
{
static int MAX_SIZE=6;
public static void dijkstra(int v,float[][]a,float[]dist,int[]prev)
{
   int n=dist.length-1;
   if(v<1||v>n)return;
   boolean []s=new boolean[n+1];
  
   for(int i=1;i<=n;i++)
   {
    dist[i]=a[v][i];
    s[i]=false;
    if(dist[i]==Float.MAX_VALUE)
     prev[i]=0;
    else
     prev[i]=v;
   }
   dist[v]=0;s[v]=true;
   for(int i=1;i<n;i++)
   {
    float temp=Float.MAX_VALUE;
    int u=v;
    for(int j=1;j<=n;j++)
     if((!s[j])&&(dist[j]<temp))
     {
      u=j;
      temp=dist[j];
     }
    s[u]=true;
    for(int j=1;j<=n;j++)
     if((!s[j])&&(a[u][j]<Float.MAX_VALUE))
     {
      float newdist=dist[u]+a[u][j];
      if(newdist<dist[j])
      {
       dist[j]=newdist;
       prev[j]=u;
      }
     }
   }
}

public static void main(String args[])
{
   float a[][]=new float[MAX_SIZE][MAX_SIZE];float[]dist=new float[MAX_SIZE];int []prev=new int[MAX_SIZE];
   for(int i=0;i<6;i++)
    for(int j=0;j<6;j++)
     a[i][j]=Float.MAX_VALUE;
   a[1][2]=10;
   a[1][4]=30;
   a[1][5]=100;
   a[2][3]=50;
   a[3][5]=10;
   a[4][3]=20;
   a[4][5]=60;
   int v=1;//假设从顶点1处出发
  
   dijkstra(v,a,dist,prev);
  
   System.out.println("从1出发到2、3、4、5的最短路径依次是:");
   for(int j=2;j<6;j++)
   {
    System.out.println(dist[j]);
   }
  
   int z=prev[5],y=prev[z],x=prev[y];
   System.out.println("从1到5最短路径经过的点为:");
   System.out.print(x+" "+y+" "+z+" "+"5");

}

}

运行结果:

从1出发到2、3、4、5的最短路径依次是:
10.0
50.0
30.0
60.0
从1到5最短路径经过的点为:
1 4 3 5



相关文章推荐

贪心算法——单源最短路径 dijkstra

关于单源最短路径的问题非常典型,这里没有给出分析与证明,仅仅给出了实现。 需要指出的是,许多实现仅给出了最短路径的长度,而没有给出“最短路径”,这里用给出了实现。 如程序中那样,定义一个数...
  • SuedeYG
  • SuedeYG
  • 2012年12月24日 20:20
  • 241

单源最短路径(贪心算法)

#include using namespace std; #include #define maxint 999 typedef int* pointer; template void Dijk...

贪心算法之单源最短路径

1、问题描述 给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其他各顶点的最短路长度。这里路的长度是指路上各边权之和。这个问题通常称为...

Dijkstra---求单源最短路径(贪心算法)

算法步骤:1) Create a set sptSet (shortest path tree set) that keeps track of vertices included in shor...
  • will130
  • will130
  • 2015年06月05日 17:47
  • 738

单源最短路径(Dijkstra)——贪心算法

Dijkstra算法是解单源最短路径问题的贪心算法。其基本思想是,设置顶点集合点集合S并不断地做贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源。...

贪心算法 - 单源最短路径 Dijkstra

单源最短路径: 一个带权有向图G=(V,E),其中n个顶点Vertex,以及连接各个顶点之间的边Edge,可能有些顶点之间没有边,每条边上的权值都是非负值。 给定其中的一个顶点,称之为源。 求出...

贪心算法之单源最短路径

问题:在一个有向网络中,从某点出发得到所有到该顶点的最短距离。 迪杰斯特拉算法是解单源最短路径问题的一个贪心算法,其基本思想是,设置顶点集合S不断的贪心选择来扩充这个集合。当源点到该顶点的最...

贪心算法------单源最短路径问题(Dijkstra)

1.问题描述

贪心算法解决单源最短路径问题

贪心算法总是做出在当前看来最好的选择,也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优选择。贪心算法的基本要素 1. 贪心选择性质 2. 最优子结构性质...

算法篇-7-贪心算法-Huffman编码&Dijkstra单源最短路径&Kruskal最小生成树

本系列所有代码https://github.com/YIWANFENG/Algorithm-github huffman编码 题目: 依据给定字符以及相应频率构造该字符的哈夫曼编码。   算法思路分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单源最短路径_贪心算法
举报原因:
原因补充:

(最多只允许输入30个字)