public class Path
{
public static void main(String args[])
{
Path p=new Path(4,1);
p.SetPathInfo();
p.PrintPath();
System.out.println();
System.out.print("The Shortest Distance is: "+p.Distance[p.EndPosition]);
}
int length=6; //图中点的个数
int[][] PathInfo={{-1,2,-1,-1,-1,9}, //边的信息数组
{2,-1,8,15,-1,6},
{-1,8,-1,1,7,-1},
{-1,15,1,-1,3,-1},
{ -1,-1,7,3,-1,3},
{ 9,6,-1,-1,3,-1}};
int StartPosition; //起始点
int EndPosition; //终点
int [] Distance=new int[length]; //起点的到各个点的最短长度
int [] Flag=new int[length]; //状态标识
int [] Pre=new int[length]; //前驱数组
int [] PathLine=new int[length]; //根据前驱数组取得节点路径
// 构造函数初始化
public Path(int start,int end)
{
StartPosition=start;
EndPosition=end;
for(int i=0;i<length;i++)
{
Pre[i]=StartPosition;
PathLine[i]=-1;
}
Pre[StartPosition]=0;
Distance[StartPosition]=0;
Flag[StartPosition]=1;
}
// 求最短路径
public void SetPathInfo()
{
for(int i=0;i<this.length;i++)
{
if(i!=StartPosition)
this.Distance[i]=PathInfo[StartPosition][i];//取得起始点一行的信息
}
while(FlagArrayStatus())
{
int index=FindMinIndex();
Flag[index]=1;
for(int i=0;i<length;i++)
{
if(PathInfo[index][i]!=-1&&i!=StartPosition)
{
if(Distance[i]==-1)
{
Distance[i]=PathInfo[index][i]+Distance[index];
Pre[i]=index;
}
if(Distance[i]!=-1&&(PathInfo[index][i]+Distance[index])<Distance[i])
{
Distance[i]=PathInfo[index][i]+Distance[index];
Pre[i]=index;
}
}
}
}
}
// 找到Distance[]数组中当前有效的最小值的索引
private int FindMinIndex()
{
int MinValue=1000;
int MinIndex=0;
for(int j=0;j<length;j++)
{
if(j!=StartPosition&&Distance[j]!=-1&&Distance[j]<MinValue&&Flag[j]!=1)
{
MinValue=Distance[j];
MinIndex=j;
}
}
return MinIndex;
}
// 检查Flag[] 数组是否全为1,若全为1则返回flase,否则返回true
private boolean FlagArrayStatus()
{
boolean Status=false;
for(int i=0;i<length;i++)
{
if(Flag[i]!=1)
{
Status=true;
break;
}
}
return Status;
}
// 打印路径
public void PrintPath()
{
int pathpoint=EndPosition;
int i=0;
while(pathpoint!=StartPosition)
{
PathLine[i]=Pre[pathpoint];
i++;
pathpoint=Pre[pathpoint];
}
for(int j=length-1;j>=0;j--)
{
if(PathLine[j]!=-1)
{
System.out.print("Position"+PathLine[j]+"->");
}
}
System.out.print("Psition"+EndPosition);
}
}
最短路径(java)
最新推荐文章于 2024-03-25 18:34:10 发布