public class DijsktraTest {
public static void main(String[] args) {
int[][] data1 = { //测试数据1
{ 0, 1, 4, -1, -1, -1 },
{ 1, 0, 2, 7, 5, -1 },
{ 4, 2, 0, -1, 1, -1 },
{ -1, 7, -1, 0, 3, 2 },
{ -1, 5, 1, 3, 0, 6 },
{ -1, -1, -1, 2, 6, 0 } };
int[][] data2 = { //测试数据2
{ 0, 1, 3, 4 },
{ 1, 0, 1, -1 },
{ 3, 1, 0, 5 },
{ 4, -1, 5, 0 } };
System.out.println(dijkstra(data1, 0,2));
int num = data[0].length;//一共有几个点
int[] distance = data[start].clone();//标号点到各点的最短路径
int[] indexs = new int[num];//存放标号的下标集合
int indexs_count = 0;//indexs集合的计数变量
boolean[] isLabel = new boolean[num];//是否标号
int index = start;//从开始点开始搜索
isLabel[start] = true;//标注开始点
while(indexs_count<num){
//求开始点到每个点的最短距离
int min = Integer.MAX_VALUE;
for(int i = 0;i<distance.length;i++){
if(distance[i]!=-1 && i!=index && !isLabel[i]){
if(min>distance[i]){
min = distance[i];
index = i;
}
}
}//for end
//找到最短路径的点的下标,并标注下一次从该点开始搜索
isLabel[index] = true;
if(index==end){
break;
}
indexs[indexs_count] = index;
indexs_count++;
//更新搜索开始点到各点的最短距离
for(int i = 0;i<distance.length;i++){
if(!isLabel[i]&&data[index][i]+min<distance[i]&&data[index][i] != -1 ){
distance[i] = data[index][i]+min;
}else if(distance[i] ==-1 && data[index][i] != -1){
distance[i] = data[index][i]+min;
}
}//for end
}//while end
return distance[end] - distance[start];
}
}
public static void main(String[] args) {
int[][] data1 = { //测试数据1
{ 0, 1, 4, -1, -1, -1 },
{ 1, 0, 2, 7, 5, -1 },
{ 4, 2, 0, -1, 1, -1 },
{ -1, 7, -1, 0, 3, 2 },
{ -1, 5, 1, 3, 0, 6 },
{ -1, -1, -1, 2, 6, 0 } };
int[][] data2 = { //测试数据2
{ 0, 1, 3, 4 },
{ 1, 0, 1, -1 },
{ 3, 1, 0, 5 },
{ 4, -1, 5, 0 } };
System.out.println(dijkstra(data1, 0,2));
}
int num = data[0].length;//一共有几个点
int[] distance = data[start].clone();//标号点到各点的最短路径
int[] indexs = new int[num];//存放标号的下标集合
int indexs_count = 0;//indexs集合的计数变量
boolean[] isLabel = new boolean[num];//是否标号
int index = start;//从开始点开始搜索
isLabel[start] = true;//标注开始点
while(indexs_count<num){
//求开始点到每个点的最短距离
int min = Integer.MAX_VALUE;
for(int i = 0;i<distance.length;i++){
if(distance[i]!=-1 && i!=index && !isLabel[i]){
if(min>distance[i]){
min = distance[i];
index = i;
}
}
}//for end
//找到最短路径的点的下标,并标注下一次从该点开始搜索
isLabel[index] = true;
if(index==end){
break;
}
indexs[indexs_count] = index;
indexs_count++;
//更新搜索开始点到各点的最短距离
for(int i = 0;i<distance.length;i++){
if(!isLabel[i]&&data[index][i]+min<distance[i]&&data[index][i] != -1 ){
distance[i] = data[index][i]+min;
}else if(distance[i] ==-1 && data[index][i] != -1){
distance[i] = data[index][i]+min;
}
}//for end
}//while end
return distance[end] - distance[start];
}
}