单源最短路径_贪心算法

原创 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算法(c++实现)

基本思想:设置顶点集合S并不断地做贪心选择来扩充这个集合。一旦S包含了所有V中的顶点,dist就记录了从源到所有其他顶点之间的最短路径长度。 顶点V是源。 c是一个二维数组,c[i][j]表示边(...
  • catkint
  • catkint
  • 2016年04月23日 09:15
  • 2659

Dijkstra算法----单源最短路径的贪心算法Java具体代码实现

这是Dijkstra算法的编程实现,package Dijkstra; public class DijstraSF { public static void main(String[] arg...
  • YuYunTan
  • YuYunTan
  • 2014年11月19日 12:42
  • 2691

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

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

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

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

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

1.算法描述        给定一个带权有向图G={V,E},以及V中的一个顶点,称为源,计算从源到其他各顶点的最短路径。 2.Dijkstra算法        Dijkstra算法是解单源最短路径...
  • wenhai_dai
  • wenhai_dai
  • 2016年04月28日 12:28
  • 690

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
  • 847

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

#include using namespace std; #include #define maxint 999 typedef int* pointer; template void Dijk...
  • hbjiaxiaoxue
  • hbjiaxiaoxue
  • 2011年12月16日 20:23
  • 396

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

暑假写的,主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。描述就不写了,看相关书籍吧。 Dijkstra是一个贪心算法。 packag...
  • mengzhejin
  • mengzhejin
  • 2014年07月16日 17:06
  • 779

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

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

贪心算法 最小生成树prim与单源最短路径dijkstra

转自:http://blog.csdn.net/kejie1235/article/details/8145676 相信很多数据结构书上都讲了两种有关“最小生成树”的...
  • wyxynddd
  • wyxynddd
  • 2016年06月15日 15:30
  • 378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单源最短路径_贪心算法
举报原因:
原因补充:

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