最短路径(java)
来源:互联网 发布:刷recovery软件 编辑:程序博客网 时间:2024/05/22 09:02
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)
- 最短路径算法(java实现)
- JAVA最短路径代码
- java&最短路径算法
- 【java】最短路径算法
- hdoj3790_最短路径问题(最短路径)
- 最短路径问题(最短路径)
- 最短路径 (yp)
- HDU1874(最短路径)
- POJ2387(最短路径)
- 图(最短路径)
- 迪杰斯特拉(最短路径)
- 最短路径(Dijkstra)
- 最短路径(未完成)
- HDU3665Seaside(最短路径)
- 最短路径(Dijkstra)
- zoj2750(最短路径)
- dijkstra(最短路径)
- UNIX环境高级编程读书笔记(十)—信号 (5)
- 巨人网络正式推出首款网页游戏
- 网站静态化代码htmll
- [转]开机时实模式下内存分布
- 第二章 算法
- 最短路径(java)
- 开发常用的一些网站(收藏)
- 我终于活着回来了!
- SQL Server的存储过程调用dll
- Build WebKit under Ubuntu9.04
- 关于程序中的assert
- fms技术
- IT精英,必须掌握的命令行
- VB 字符串处理函数集