【发布时间】:2014-01-09 15:26:09
【问题描述】:
这是我的 Dijkstra 类的示例代码:
public class Dijkstra {
public static int[] GetPath(IGraph graph,int start,int end){
int[] dist=new int[graph.size()+1];
Stack<Integer> Path =new Stack<Integer>();
int[] previous=new int[graph.size()+1];
boolean[] visited=new boolean[graph.size()+1];
HashSet<Integer> Q=new HashSet<Integer>();
int i,u = 0,min;
for (i=0;i<graph.size();i++){
dist[i]=10000;
visited[i]=false;
previous[i]=-1;
}
dist[start]=0;
Q.add(start);
while(!Q.isEmpty()){
min=1000;
for(i=0;i<graph.size();i++){
if(dist[i]<min&&visited[i]==false){
min=dist[i];
u=i;
}
}
Q.remove(u);
visited[u]=true;
//Process all the outbound vertexes of the current vertex;
int[] outb=graph.IterateOutbound(u);
if(outb!=null){
for (int v=0;v<outb.length-1;v++){
int alt=dist[u]+graph.retrieveCost(u, outb[v]);
if(alt<dist[outb[v]]&&!visited[outb[v]]){
dist[outb[v]]=alt;
previous[outb[v]]=u;
Q.add(outb[v]);
}
}
}
}
return previous;
}
}
我不知道如何使用“前一个”向量(其中保存了算法访问的每个顶点,直到它成功,但不是成本最低的那个)来返回正确的路径 -成本较低的那个。当我用谷歌搜索时,我发现我需要另一个函数(使用“上一个”向量)来计算路径。还是有人有其他想法? '
附加信息:Graph 是一个具有属性的类 - innies,outies,cost .. IterateOutbound 是一个函数,它返回一个顶点的出站顶点列表 我从文件中读取信息
【问题讨论】:
标签: java algorithm path dijkstra