Dijkstra Algorithm - How do I change the reading of the txt file in C to be identified in int and not string?

Asked

Viewed 279 times

1

Good night, I’m having a question how to change the reading of the txt file, where the compiler identifies with char but within the file that need read, possessed only numbers, someone could help me ?

Attached is the error you are reporting.

inserir a descrição da imagem aqui

using namespace std;

class Grafo
{
private:
    int V; // numero de vertices

    // ponteiro para um array contendo as listas de adjacencias
    list<pair<int, int> > * adj;

public:

    // construtor
    Grafo(int V)
    {
        this->V = V; // atribui o numero de vertices

        /*
            cria as listas onde cada lista é uma lista de pairs
            onde cada pai r é formado pelo vértice destino e o custo
        */
        adj = new list<pair<int, int> >[V];
    }

    // adiciona uma aresta ao grafo de v1 a  v2
    void addAresta(int v1, int v2, int custo)
    {
        adj[v1].push_back(make_pair(v2, custo));
    }

    // algoritmo de Dijkstra
    int dijkstra(int orig, int dest)
    {
        // vetor de distancias
        int dist[V];

        /*
           vetor de visitados serve para caso o vertice ja¡ tenha sido
           expandido (visitado), nao expandir mais
        */
        int visitados[V];

        // fila de prioridades de pair (distancia, vertice)
        priority_queue < pair<int, int>,
                       vector<pair<int, int> >, greater<pair<int, int> > > pq;

        // inicia o vetor de distancias e visitados
        for(int i = 0; i < V; i++)
        {
            dist[i] = INFINITO;
            visitados[i] = false;
        }

        // a distancia de orig para origem 0
        dist[orig] = 0;

        // insere na fila
        pq.push(make_pair(dist[orig], orig));

        // loop do algoritmo
        while(!pq.empty())
        {
            pair<int, int> p = pq.top(); // extrai o pair do topo
            int u = p.second; // obtem o vertice do pair
            pq.pop(); // remove da fila

            // verifica se o vertice nao foi expandido
            if(visitados[u] == false)
            {
                // marca como visitado
                visitados[u] = true;

                list<pair<int, int> >::iterator it;

                // percorre os vertices "v" adjacentes de "u"
                for(it = adj[u].begin(); it != adj[u].end(); it++)
                {
                    // obtem o vertice adjacente e o custo da aresta
                    int v = it->first;
                    int custo_aresta = it->second;

                    // relaxamento (u, v)
                    if(dist[v] > (dist[u] + custo_aresta))
                    {
                        // atualiza a distancia de "v" e insere na fila
                        dist[v] = dist[u] + custo_aresta;
                        pq.push(make_pair(dist[v], v));
                    }
                }
            }
        }

        // retorna a distancia minima ate o destino
        return dist[dest];
    }
};

int main(int argc, char *argv[])
{
    int indicei, indicej, mat[5][5];

    for (indicei=0; indicei<5;indicei++){
        for(indicej=0 ; indicej<5; ++indicej){

            FILE *file;

            file = fopen("C:\\Users\\VINICIUSBENTOMARQUES\\Desktop\\Trabalho IA\\Trabalho IA\\cidades.txt", "r");

            if(file == NULL){
                printf("Não foi possível abrir o arquivo.\n");
                getchar();
                exit(0);
             }

            char numeros[1000];

            while(fgets(numeros, 1000, file) != NULL){
                printf("%s", numeros);
             }

            fclose(file);

            Grafo g(5);

        g.addAresta(indicei, indicej, mat[indicei,indicej]);


            cout << fprintf(file,"%i", g.dijkstra(mat[indicei,indicej])) <<endl;

        }
    }
    return 0;
}
  • Always put the error in text also so that it is searchable and preferably in the question title as well. What the error indicates is that it has no function with the name dijkstra receive the parameters you are passing (a int[]). This looks like typo because you have g.dijkstra(mat[indicei,indicej])) instead of g.dijkstra(mat[indicei][indicej]))

1 answer

0

When you are calling the function g.dijkstra() it needs two whole parameters, one for origin and one for destination g.dijkstra(origem, destino). And in your case you are only sending a value that is in the matrix at the positions of the Dice.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.