1

更新:我添加了小提琴。请参考这里。使用 Web 控制台查看错误。

我正在为旅行推销员问题编写代码。这是代码:

var ind =[];      //values selected 
var cp =[];
var X;
var Y;
var tour = [];


// no values selected in the starting
for(j=0;j<friends_cnt;j++) {
  ind[j] = 0;
}


// distances at i,i infinity
for(i=0;i<friends_cnt;i++) {
  distance[i][i] = 9999999999999;
}

var k = 0;
var X = 0;

tour[k] =  X;
ind[X] = 1;


var i =1;
while(i<friends_cnt &&  ind[i] === 0) {
  var min = 9999999999999;

    // finding minimum of the undeleted values
    for(j=0;j<friends_cnt;j++) {
      if(ind[j] === 0) {
        if(distance[X][j] < min) {
          min = distance[X][j];
          Y = j;  // y is the min city
        }
      }
    }


    k = k+1;               // counter for the starting city
    tour[k] = Y;           //city added
    ind[Y] = 1;            

   X = Y;
   i++;
}

k = k+1;
tour[k] = tour[1];

for(var q=0;q<k+1;q++) {
  console.log(tour[q]);
}

});
});

现在每当我运行我的程序时,它都会显示错误

TypeError: can't convert undefined to object

在行中

var min = 9999999999999; 

我的问题是这是因为 JavaScript 无法处理大数字或其他问题吗?

4

3 回答 3

1

Javascript 的最大数字是 1.7976931348623157e+308 (又名 var Number.MAX_VALUE),所以这应该不是问题。

如果你试图访问一个对象的一个​​对象,它是行不通的。

你有distance[X][j]. 试图访问j. distance[X]要解决此问题,请定义distance[X]为对象:

distance[X] = [];

其他示例:

var distance = [];

distance[i]
//undefined;

distance[i][i]
//syntax error

distance[i] = [];

distance[i][i]
//undefined;

对于 2D 数组,请参阅问题。

于 2013-02-07T05:11:43.060 回答
0

试试这个以获得最小数量 var min = int.MinValue
对于最大数量 var max = int.MaxValue

编辑
参考参考

Number.Max_Value  
Number.Min_Value

更新
如果你看到你的代码你已经填写了ind[]from0

for(j=0;j<friends_cnt;j++) {
  ind[j] = 0;
}

在您的 while 条件下,您设置了ifrom的值1。所以对于最后一个元素,它可能会抛出错误

于 2013-02-07T05:10:19.377 回答
0

问题实际上在这里:

distance[i][i] = 9999999999999;

如果distanceisundefined或空数组,则该语句将失败。这应该解决它:

var distance = []; // <-- this is missing from the top of your code

// ...

if (!distance[i]) {
    distance[i] = [];
}
distance[i][i] = 9999999999999;
于 2013-02-07T07:05:24.940 回答