是求无向多段图的代码 溢出了 求高手指教
public class Graphic { public static void main(String[] args) {
System.out.println("最短路径:" + min(0,node));
path[0] = 0;
for(int i=0; i<path.length; i++){
System.out.println(path[i] + " ");
}
}
static int node[][] = {
{0,4,3,3,'∞','∞','∞','∞'},
{4,0,'∞','∞',2,1,6,'∞'},
{3,'∞',0,'∞',4,7,2,'∞'},
{3,'∞','∞',0,4,8,3,'∞'},
{'∞',2,4,4,0,'∞','∞',6},
{'∞',1,7,8,'∞',0,'∞',5},
{'∞',6,2,3,'∞','∞',0,1},
{'∞','∞','∞','∞',6,5,1,0}
}; static int[] path = new int[8];
public static int[] getPoints(int start){//得到连接点
int[] p = {0,0,0,0,0,0,0,0};
int counter = 0;
for(int i=0; i<node[start].length; i++){
if(node[start][i]!=0 || node[start][i]!='∞'){
p[counter] = i;
counter++;
}
}
return p;
}
public static int min(int start,int[][] node){
int[] points = getPoints(start);
int[] minlength = new int[points.length];
int num = 0;
int temp = 0;
for(int i=0; i<points.length; i++){
minlength[i] = node[start][points[i]]+min(points[i],node);
}
for(int j=1; j<minlength.length; j++){
if(minlength[j-1]<minlength[j]){
temp = minlength[j-1];
num = j-1;
}
}
path[start+1] = points[num];
return temp;
}
}
public class Graphic { public static void main(String[] args) {
System.out.println("最短路径:" + min(0,node));
path[0] = 0;
for(int i=0; i<path.length; i++){
System.out.println(path[i] + " ");
}
}
static int node[][] = {
{0,4,3,3,'∞','∞','∞','∞'},
{4,0,'∞','∞',2,1,6,'∞'},
{3,'∞',0,'∞',4,7,2,'∞'},
{3,'∞','∞',0,4,8,3,'∞'},
{'∞',2,4,4,0,'∞','∞',6},
{'∞',1,7,8,'∞',0,'∞',5},
{'∞',6,2,3,'∞','∞',0,1},
{'∞','∞','∞','∞',6,5,1,0}
}; static int[] path = new int[8];
public static int[] getPoints(int start){//得到连接点
int[] p = {0,0,0,0,0,0,0,0};
int counter = 0;
for(int i=0; i<node[start].length; i++){
if(node[start][i]!=0 || node[start][i]!='∞'){
p[counter] = i;
counter++;
}
}
return p;
}
public static int min(int start,int[][] node){
int[] points = getPoints(start);
int[] minlength = new int[points.length];
int num = 0;
int temp = 0;
for(int i=0; i<points.length; i++){
minlength[i] = node[start][points[i]]+min(points[i],node);
}
for(int j=1; j<minlength.length; j++){
if(minlength[j-1]<minlength[j]){
temp = minlength[j-1];
num = j-1;
}
}
path[start+1] = points[num];
return temp;
}
}
for (int i = 0; i < points.length; i++) {
minlength[i] = node[start][points[i]] + min(points[i], node);
}这里面,在什么情况下就应该不用递归调用了的。
if (start == end) {
return 0;
} else {
int[] points = getPoints(start);
int[] minlength = new int[points.length];
int num = 0;
int temp = 0; for (int i = 0; i < points.length; i++) {
minlength[i] = node[start][points[i]] + min(points[i], end);
} for (int j = 1; j < minlength.length; j++) {
if (minlength[j - 1] < minlength[j]) {
temp = minlength[j - 1];
num = j - 1;
}
} path[start + 1] = points[num];
return temp;
}
}
还是不行