Wrong answer due to precision issues?

Viewed 10

I am implementing Greedy Approach to TSP:

  1. Start from first node.

  2. Go to nearest node not visited yet. (If multiple, go to the one with the lowest index.)

  3. Don't forget to include distance from node 1 to last node visited.

However, my code gives the wrong answer. I implemented the same code in Python and the python code gives right answer.

In my problem, the nodes are coordinates on 2-D plane and the distance is the Euclidean Distance.

I even changed everything to long double because it's more precise.

In fact, if I reverse the order of the for loop to reverse the direction and add an additional if statement to handle ties (we want minimum index nearest node), it gives a very different answer.

Is this because of precision issues?

long double ans = 0;
int last = 0;
int cnt = n - 1;
vector<int> taken(n, 0);
taken[0] = 1;

while (cnt > 0) {
    pair<long double, int> mn = {1e18, 1e9};
    for (int i = 0; i < n; ++i) {
        if (!taken[i]) {
            mn = {dis(i, last), i};
        }
    }

    int nex = mn.second;
    taken[nex] = 1;
    cnt--;
    ans += sqrt(mn.first);
    last = nex;
}

ans += sqrt(dis(0, last));
0 Answers
Related