是求无向多段图的代码  溢出了  求高手指教  
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;
}
}

解决方案 »

  1.   


    for (int i = 0; i < points.length; i++) {
    minlength[i] = node[start][points[i]] + min(points[i], node);
    }这里面,在什么情况下就应该不用递归调用了的。
      

  2.   

    给位大侠  我修改了之后是public static int min(int start, int end) {
    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;
    }
    }
    还是不行