Pessoal, estou com um problema, onde através de um arquivo txt eu deve criar um programa para mostrar o Numero de vizinhos, nós e distancia. E depois criar o algoritmo de djkstra dos minimos caminhos a partir de um ponto inicial, o problema é que o meu programa sempre pega o mesmo valor, qualquer caminho inicial que eu pego sempre vai para o ''0', nao sei aonde estou errando.
void armazenar(){
char texto[100], filename[100];
int i,j;
FILE *arq;
strcpy(filename,"centro.txt");
if((arq=fopen(filename,"rt"))==NULL){
printf("Erro ao abrir arquivo: %s",filename);
}
for(i=0;i<this->n_nos;i++){
for(j=0;j<this->n_nos;j++){
fscanf(arq,"%[^;]; ",&texto);
if(strcmp(texto,"0")!=0){
no.no_adj.push_back(j);
no.distancia.push_back(atof(texto));
no.n_vizinhos++;
}
}
}
fclose(arq);
};
void dijkstra(int no_inicial){
int menor_distancia,posicao,linhas,colunas,contador,i,j,precedente;
contador=0;
std::vector<int>::iterator it;
std::vector<float>::iterator ot;
float **m;
linhas=3;
colunas=n_nos;
m=(float**)calloc(linhas,sizeof(float*));//m=matriz da tabela la
for(i=0;i<linhas;i++){
m=(float*)calloc(colunas,sizeof(float));
}
m[2][no_inicial]=1;
contador++;
precedente=no_inicial;
m[1][no_inicial]=precedente;
while(contador<this->n_nos){
ot=no[precedente].distancia.begin();
for(it=no[precedente].no_adj.begin();it<no[precedente].no_adj.end();it++){
if(m[2][*it]=0){
m[0][*it]+=*ot;
m[1][*it]=precedente;
ot++;
}
}
menor_distancia= 20000;
posicao=0;
for(j=0;j<colunas;j++){
if(m[0][j]>0 && m[2][j]==0 && m[0][j]<menor_distancia){
menor_distancia=m[0][j];
posicao=j;
}
}
m[2][posicao]=1;
contador++;
precedente=posicao;
}
};
};