学校のプロジェクトのこの部分で、2 つの座標間の最短ルートを取得する必要があります (巡回セールスマン問題)。ここで、最も近い隣人の座標を取得するために少し何かを作成しましたが、いくつかの座標には同じ最も近い隣人がいて、それは望ましくありません。
その問題を解決する方法を考えましたが、うまくいきません。理由がわかりません。
distance
現在の位置と他のすべての間の現在の距離です。shortestDistance
一種のそれ自体が私が思うに語っています。
locations[20][3]
は、Xco-ord、Yco-ord、および各 co-ord の最近傍を格納する 2D 配列です。X は [x][0] に、Y は [x][1] に、近隣は [x][2] にある
for(int i = 0; i < 20; i++){
int shortestDistance = 100;
int distance;
//Looking for nearest neighbour 20 times
for(int j = 0; j < 20; j++){
//Looking for the closest neighbour here
distanceX = locations[i][0] - locations[j][0];
distanceY = locations[i][1] - locations[j][1];
//To prevent a negative distance:
if(distanceX < 0){
distanceX = distanceX * -1;
}
if(distanceY < 0){
distanceY = distanceY * -1;
}
//Add distance
distance = distanceX + distanceY;
//If current distance is shorter then the shortestdistance, to prevent it does'nt see itself as 'neighbour' and to prevent another co-ord has the same neighbour, which happens in isOk();
if(distance < shortestDistance && distanceX + distanceY != 0 && isOk(j)){
shortestDistance = distance;
locations[i][2] = j;
}
}
}
関数 isOk は次のとおりです。
private boolean isOk(int j){
boolean result = false;
for(int i = 0; i < 20; i++){
if(locations[i][2] == j){
result = false;
}
else{
result = true;
}
}
return result;
}
だから、私が求めているのは、私が間違っていることですか?最も近い隣と同じアイテムを持ついくつかのアイテム(20 * 10ストレージ内)をまだ取得しています。