0

学校のプロジェクトのこの部分で、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ストレージ内)をまだ取得しています。

4

1 に答える 1