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

問題は実際にはここにあります:

distance[i][i] = 9999999999999;

または空の配列の場合、そのステートメントは失敗しますdistanceundefinedこれで修正されるはずです:

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 に答える
0

最小数の場合はこれを試してください var min = int.MinValue
最大数 の場合var max = int.MaxValue

編集された
参照参照

Number.Max_Value  
Number.Min_Value

更新
されたあなたのコードが表示された場合はind[]0

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

while 条件ではifromの値を設定しています1。したがって、最後の要素については、エラーがスローされる可能性があります

于 2013-02-07T05:10:19.377 に答える