单源最短路径贪心算法 c语言,单源最短路径_贪心算法

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

{

float temp=Float.MAX_VALUE;

int u=v;

for(int j=1;j<=n;j++)

if((!s[j])&&(dist[j]

{

u=j;

temp=dist[j];

}

s[u]=true;

for(int j=1;j<=n;j++)

if((!s[j])&&(a[u][j]

{

float newdist=dist[u]+a[u][j];

if(newdist

{

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值