这是我学贪心算法写的单源最短路径(java实现)贪心算法实现,可能写的不是太好,献丑一放。
import java.util.Scanner;
public class zuiduanlujing {
public static void main(String[] args) {
int [][] s=new int[100][100];
int [] minst=new int[100];
int [] tag=new int[100];
Scanner in=new Scanner(System.in);
System.out.println("请输入点的数目");
int n=in.nextInt();
int i=0,j=0;
for( i=0;i<100;i++)
{
for( j=0;j<100;j++)
{
if(i==j)
{
s[i][j]=0;
}
else
{
s[i][j]=1000;
}
}
minst[i]=1000;
}
minst[1]=0;
System.out.println("假设源点为1,请输入有向边,输入为0 0表示结束输入");
int x=in.nextInt();
int y=in.nextInt();
int num=in.nextInt();
for(;!(x==0&&y==0);)
{
s[x][y]=num;
if(x==1)
{
minst[y]=s[x][y];
}
x=in.nextInt();
y=in.nextInt();
num=in.nextInt();
}
int newadd=1000;
for( i=2;i<=n;i++)
{
if(minst[i]<newadd)
{
newadd=i;
}
}
for( i=0;i<100;i++)
{
tag[i]=1;
}
tag[1]=0;
tag[newadd]=0;
for( i=2;i<=n;i++)
{
for( j=2;j<=n;j++)
{
if(tag[j]==1&&(s[newadd][j]+minst[newadd]<minst[j]))
{
minst[j]=s[newadd][j]+minst[newadd];
}
}
newadd=0;
for(int m=1;m<n;m++)
{
if(tag[m]==1&&minst[newadd]>minst[m])
{
newadd=m;
}
}
tag[newadd]=0;
}
for( i=1;i<=n;i++)
{
System.out.println(1+"到"+i+"的距离 "+minst[i]);
}
}
}