public void shortestPath(int i) {
int n = this.vertexCount();
int vset[] = new int[n];//标记顶点
int path[] = new int[n];//i到j的 路径
int dist[] = new int[n];//i到j 点的总长度
vset[i] = 1;
for(int j = 0;j < n;j++) {//初始化
dist[j] = this.getWeight(i, j);
path[j] = i;
}
for(int j = 0;j < n;j++) {
int u = -1;
int MAX = MAX_INT;
for (int k = 0;k < n;k++) //找最小
if (vset[k] == 0 && dist[k] < MAX) {
u = k;
MAX = dist[k];
}
if (u == -1) break;//没有最小的
vset[u] = 1;
for (int k = 0;k < n;k++) //用找到的最小进行调整
if(vset[k] == 0 && dist[u] + this.getWeight(u, k) < dist[k]){
dist[k] = dist[u] + this.getWeight(u, k);
path[k] = u;
}
}
for (int j = 0;j < n;j++) {
if(j == i) continue;
String str = "";
int u = j;
str = "->v" + j;
while (path[u] != i) {
str = "->v" + path[u] + str;
u = path[u];
}
str = "v" + i + str;
System.out.print(str + " ");
if(dist[j] == MAX_INT)
System.out.println("无最短路径");
else
System.out.println(dist[j]);
}
}
int n = this.vertexCount();
int vset[] = new int[n];//标记顶点
int path[] = new int[n];//i到j的 路径
int dist[] = new int[n];//i到j 点的总长度
vset[i] = 1;
for(int j = 0;j < n;j++) {//初始化
dist[j] = this.getWeight(i, j);
path[j] = i;
}
for(int j = 0;j < n;j++) {
int u = -1;
int MAX = MAX_INT;
for (int k = 0;k < n;k++) //找最小
if (vset[k] == 0 && dist[k] < MAX) {
u = k;
MAX = dist[k];
}
if (u == -1) break;//没有最小的
vset[u] = 1;
for (int k = 0;k < n;k++) //用找到的最小进行调整
if(vset[k] == 0 && dist[u] + this.getWeight(u, k) < dist[k]){
dist[k] = dist[u] + this.getWeight(u, k);
path[k] = u;
}
}
for (int j = 0;j < n;j++) {
if(j == i) continue;
String str = "";
int u = j;
str = "->v" + j;
while (path[u] != i) {
str = "->v" + path[u] + str;
u = path[u];
}
str = "v" + i + str;
System.out.print(str + " ");
if(dist[j] == MAX_INT)
System.out.println("无最短路径");
else
System.out.println(dist[j]);
}
}