Problem komiwojażera w języku C (TSP Problem)

0

Witam, potrzebuję małej pomocy w kodzie. Mój program "rozwiązujący" ten problem dla 4 miast nie działa do końca tak jak się spodziewałem. Mógłby ktoś zerknąć fachowym okiem co tu trzeba poprawić?

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int cost = 0;
int graph [4][4];
int visited [4];

void takeInput ()
{
    int i, j;
    printf ("Give Values: \n");
    for (i=0; i<4; i++)
    {
        for (j=0; j<4; j++)
            scanf ("%d", &graph[i][j]);
    }

        printf ("The graph is: \n: \n");
    for (i=0; i<4; i++)
    {
        for (j=0; j<4; j++)
            printf ("%d\t", graph[i][j]);
        printf ("\n");
    }
}


int find_next_node(int node)
{
    int nd, min=INT_MAX, min_index, democost, i;

    for (i=0; i<4; i++)
    {
        if (!visited[i] && graph[node][i] != 0 && graph[node][i] < min)
        {
            democost=graph[node][i];
            min = graph[node][i];
            min_index=i;
        }
    }

    nd = min_index;
    cost=cost+democost;

    return nd;

}

void TSP (int node)
{
    int next_node;
    visited[node]=1;
    printf("%d->", node);

    next_node = find_next_node(node);
    if (next_node == INT_MAX)
    {
        int v=0;
        cost=cost+graph[next_node][v];
        printf("%d", v);
        return;
    }

    TSP (next_node);
}


int main()
{
    takeInput();
    int i;
    int start;
    for (i=0; i<4; i++)
        visited[i]=0;

    printf ("Enter start node: \n");
    scanf ("%d", &start);
    printf ("TSP path\n");

    TSP(start);
    return 0;
}
0

Wg mnie wywalić i napisać od nowa.
Zauważ że musisz sprawdzić wszystkie permutacje wektora {0,1,2,3,4, ... N-1} gdzie w twoim przypadku N=4;

0
int find_next_node(int node)
{
    int nd, min=INT_MAX, min_index, democost, i;

    for (i=0; i<4; i++)
    {
        if (!visited[i] && graph[node][i] != 0 && graph[node][i] < min)
        {
            democost=graph[node][i];
            min = graph[node][i];
            min_index=i;
        }
    }

    nd = min_index;
    cost=cost+democost;
    // jaką wartość ma "democost" oraz "min_index" jeśli "if" nigdy nie wejdzie do brancha? 
    // Np wjedziesz w ślepy zaułek, bo już odwiedziłeś wszystkich sąsiadów
    return nd;

}

Na dodatek masz nieskończoną rekurencję https://godbolt.org/z/3sfW9e

1 użytkowników online, w tym zalogowanych: 0, gości: 1