#include #include #define MAX_FLOAT 100000 int main(int argc, char **argv, char **env) { FILE* fd; char buf[50]; char *p; int buflen,i,j,numnodos=0,nodopartida,indicearco=0; char *mode="r"; float f,g; float **matriz; typedef struct NC { int i; int j; float f; } nc; nc nodo; nc *resultado; //Chequea sintaxis if (argv[1]==NULL) { printf("Uso: %s ",argv[0]); exit(1); } //Cuenta cuántos nodos hay if ((fd=fopen(argv[1],mode))<0) { perror(argv[1]); exit(1); } while (fgets(buf,sizeof(buf),fd)>0) { i=atoi(buf); if (i>numnodos) numnodos=i; p=buf+1; while (*p>45 && *p<58) p++; j=atoi(p); if (j>numnodos) numnodos=j; } numnodos++; fclose(fd); //Crea la matriz con el numero de nodos matriz=new float*[numnodos]; resultado=new nc[numnodos-1]; for (i=0;i0) { i=atoi(buf); p=buf+1; while (*p>45 && *p<58) p++; j=atoi(p); p++; while (*p>45 && *p<58) p++; f=atof(p); matriz[i][j]=f; } fclose(fd); //Dijkstra nodopartida=0; matriz[0][numnodos]=0; //Busca el nodo más chico dentro de los posibles for (int k=0;kmatriz[i][j] && matriz[j][numnodos]!=0) { nodo.f=matriz[i][j]; nodo.i=i; nodo.j=j; } } } //Guarda el nodo y lo deja marcado en la matriz como "usado" resultado[indicearco].i=nodo.i; resultado[indicearco].j=nodo.j; resultado[indicearco].f=nodo.f; indicearco++; matriz[nodo.i][nodo.j]+=MAX_FLOAT; matriz[nodo.j][numnodos]=0; } for (i=0;i\t%i\t%f",nodopartida,resultado[i].j,t); printf("\n\n"); } //Devueve la memoria pedida for (int j=0;j