Solve Travelling Sales Person problem using Dynamic programming.

In This Post we are Solve Travelling Sales Person problem using Dynamic programming.

9] Solve Travelling Sales Person problem using Dynamic programming.

PROGRAM :-

import java.util.Scanner;

class TSPExp {

    int weight[][], n, tour[], finalCost;

    final int INF = 1000;

    TSPExp()

    {

        Scanner s = new Scanner(System.in);

        System.out.println("Enter no. of nodes :=>");

        n = s.nextInt();

        weight = new int[n][n];

        tour = new int[n - 1];

        for (int i = 0; i < n; i++)

        {

            for (int j = 0; j < n; j++)

            {

                if (i != j)

                {

                    System.out.print("Enter weight of " + (i + 1) + " to " + (j + 1) + ":=> ");

                    weight[i][j] = s.nextInt();

                }

            }

        }

        System.out.println();

        System.out.println("Starting node assumed to be node 1.");

        eval();

    }

    public int COST(int currentNode, int inputSet[], int setSize)

    {

        if (setSize == 0)

            return weight[currentNode][0];

        int min = INF;

        int setToBePassedOnToNextCallOfCOST[] = new int[n - 1];

        for (int i = 0; i < setSize; i++)

        {
            int k = 0;// initialise new set

            for (int j = 0; j < setSize; j++)

            {

                if (inputSet[i] != inputSet[j])

                    setToBePassedOnToNextCallOfCOST[k++] = inputSet[j];

            }

            int temp = COST(inputSet[i], setToBePassedOnToNextCallOfCOST, setSize - 1);

            if ((weight[currentNode][inputSet[i]] + temp) < min)

            {

                min = weight[currentNode][inputSet[i]] + temp;

            }

        }

        return min;

    }

    public int MIN(int currentNode, int inputSet[], int setSize)

    {

        if (setSize == 0)

            return weight[currentNode][0];

        int min = INF, minindex = 0;

        int setToBePassedOnToNextCallOfCOST[] = new int[n - 1];

        for (int i = 0; i < setSize; i++)// considers each node of inputSet

        {

            int k = 0;

            for (int j = 0; j < setSize; j++)

            {

                if (inputSet[i] != inputSet[j])

                    setToBePassedOnToNextCallOfCOST[k++] = inputSet[j];

            }

            int

            temp = COST(inputSet[i], setToBePassedOnToNextCallOfCOST, setSize - 1);

            if ((weight[currentNode][inputSet[i]] + temp) < min)

            {

                min = weight[currentNode][inputSet[i]] + temp;

                minindex = inputSet[i];

            }

        }

        return minindex;

    }

    public void eval()

    {

        int dummySet[] = new int[n - 1];

        for (int i = 1; i < n; i++)

            dummySet[i - 1] = i;

        finalCost = COST(0, dummySet, n - 1);

        constructTour();

    }

    public void constructTour()

    {

        int previousSet[] = new int[n - 1];

        int nextSet[] = new int[n - 2];
        for (int i = 1; i < n; i++)

            previousSet[i - 1] = i;

        int setSize = n - 1;

        tour[0] = MIN(0, previousSet, setSize);

        for (int i = 1; i < n - 1; i++)

        {

            int k = 0;

            for (int j = 0; j < setSize; j++)

            {

                if (tour[i - 1] != previousSet[j])

                    nextSet[k++] = previousSet[j];

            }

            --setSize;

            tour[i] = MIN(tour[i - 1], nextSet, setSize);

            for (int j = 0; j < setSize; j++)

                previousSet[j] = nextSet[j];

        }

        display();

    }

    public void display()

    {

        System.out.println();

        System.out.print("The tour is 1-");

        for (int i = 0; i < n - 1; i++)

            System.out.print((tour[i] + 1) + "-");

        System.out.print("1");

        System.out.println();

        System.out.println("The final cost is " + finalCost);

    }

}

class TspDp{

    public static void main(String args[])

    {

        TSPExp obj = new TSPExp();

    }

}

Leave a Reply

Your email address will not be published. Required fields are marked *