一个Dijkstra算法的完整Java程序实现,算法初学者必看! - brokencar的专栏 - CSDNBlog
来源:百度文库 编辑:神马文学网 时间:2024/04/28 22:40:19
public class Dijkstra {
public static void main(String[] args) {
new Dijkstra().use();
}
public void use(){
new Dijkstra().dijkstra(0, a, dist, prev);
for (int i = 0; i < dist.length; i++) {
System.out.print(dist[i]+" ");
}
}
//单元最短路径问题的Dijkstra算法
public void dijkstra(int v ,float[][] a, float[] dist,int[] prev){
int n = dist.length - 1 ;
if(v < 0 || v > n-1) 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 < n; i++){
float temp = Float.MAX_VALUE;
int u = v;
for(int j = 1; j <= n; j++){
if((!s[j]) && (dist[j] < temp)){
u = j;
temp = dist[j];
}
}
s[u] = true; //找到了第一个并入S的节点
for(int j = 1; j <= n; j++){
if((!s[j]) && (a[u][j] < Float.MAX_VALUE)){
float newdist = dist[u] + a[u][j];
if(newdist < dist[j]){
//dist[j] 减少
dist[j] = newdist;
prev[j] = u;
}
}
}
}
}
private float[][] a = {
{0,10,max,30,100},
{max,0,50,max,max},
{max,max,0,max,10},
{max,max,20,0,60},
{max,max,max,max,0}
};
private float[] dist = new float[5];
private int[] prev = new int[5];
public static final float max = Float.MAX_VALUE;
}
public static void main(String[] args) {
new Dijkstra().use();
}
public void use(){
new Dijkstra().dijkstra(0, a, dist, prev);
for (int i = 0; i < dist.length; i++) {
System.out.print(dist[i]+" ");
}
}
//单元最短路径问题的Dijkstra算法
public void dijkstra(int v ,float[][] a, float[] dist,int[] prev){
int n = dist.length - 1 ;
if(v < 0 || v > n-1) 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 < n; i++){
float temp = Float.MAX_VALUE;
int u = v;
for(int j = 1; j <= n; j++){
if((!s[j]) && (dist[j] < temp)){
u = j;
temp = dist[j];
}
}
s[u] = true; //找到了第一个并入S的节点
for(int j = 1; j <= n; j++){
if((!s[j]) && (a[u][j] < Float.MAX_VALUE)){
float newdist = dist[u] + a[u][j];
if(newdist < dist[j]){
//dist[j] 减少
dist[j] = newdist;
prev[j] = u;
}
}
}
}
}
private float[][] a = {
{0,10,max,30,100},
{max,0,50,max,max},
{max,max,0,max,10},
{max,max,20,0,60},
{max,max,max,max,0}
};
private float[] dist = new float[5];
private int[] prev = new int[5];
public static final float max = Float.MAX_VALUE;
}
一个Dijkstra算法的完整Java程序实现,算法初学者必看! - brokencar的专栏 - CSDNBlog
Dijkstra算法的实现
java排序算法 - 大海的专栏 - CSDNBlog
Dijkstra算法的完整实现版本之算法的源代码1
排序算法小结 - ilibaba的专栏 - CSDNBlog
java实现的18位身份证格式验证算法
用Java实现几种常见的排序算法
各种排序算法java实现
贪心算法在背包背包问题中应用的探讨1 - shaopengfei的专栏 - CSDNBlog
采用部分快速排序算法实现数组的部分排序 - eaglet的专栏 - CSDN博客
一个简单的算法Crackme
基于堆栈的计算器实现算法
Linux中定时器的实现算法
模式识别c均值算法的实现
将java程序运行为Windows服务 - dragonbbc的专栏 - CSDNBlog
大学生学软件必看 - hellogv的专栏 - CSDNBlog
钢筋基本算法,学的必转
模式识别c均值算法的实现(C++实现)
JAVA 写的日历程序 - JAVA代码分析 - CSDNBlog
【转载】一个牛人给java初学者的建议 - haobo920的专栏 - CSDN博客
【转载】一个牛人给java初学者的建议 - haobo920的专栏 - CSDN博客
【转载】一个牛人给java初学者的建议 - haobo920的专栏博客
effective java中讲到的hashCode的算法
百度“变态比赛规则”算法题java的解法