| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
arthur16
Registrado: 08 Sep 2013 Mensajes: 2
| Publicado: 08/09/2013 9:52 am | | | Título: necesito ayuda |
| bueno soy principiante en esto...pero en la universidad me han pedido que tengo que hecer un programa con el algoritmo de floyd y luego sacar por que nodos pasa el programa para sacar el camino mas corto...lo primero de sacar el algoritmo implementarlo y todo lo que es el programa esta hecho...me falta el poder sacar el camino por el que pasa el programa y la verdad...no se como hacerlo.
Por favor ayuda urgente de como hacerlo.
Programo en c++.
Estuve buscando por el foro y creo que no vi este caso...si me equivoco lo siento, avisadme.
Muchas gracias. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 08/09/2013 10:48 am | | | Título: |
| Hola
Bienvenido a los foros. Por favor lee sus reglas.
Solo tienes que modificar el algoritmo de Floyd para tomar nota de cada una de las rutas. Como hacerlo se describe (en seudocodigo) en la pagina cortesía de Wikipedia: Floyd–Warshall algorithm.
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
|
| Volver arriba | |
 |
arthur16
Registrado: 08 Sep 2013 Mensajes: 2
| Publicado: 10/09/2013 12:27 am | | | Título: Muy agradecido |
| Muchas gracias rir3760. Me costo un poco entender como hacer el algoritmo, o mejor dicho como entenderlo, para saber como interpretar la matriz de datos resultante.
Alguien podria ayudarme con otro problema. Tengo que leer un fichero en el que estan estos datos: 5 Londres Oslo Madrid Roma Praga . 90 30 150 . 120 . 70 125 . 20 . . 90 50 25 80 70 . 30 . 30 . 30 .
en ese orden, el 5 es para saber el numero de ciudades que hay, luego el nombre de esas ciudades (necesitaria saber como guardar esos nombres para luego utilizarlos en comparaciones, etc.) y abajo lo que cuesta ir de una ciudad a otra, que es lo que resuelve el algoritmo de Floyd.
Muchas gracias. |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 11/09/2013 6:54 am | | | Título: |
| La forma mas fácil es leyendo el archivo linea por linea, para ello utilizas las funciones open y getline para abrir el archivo y leer una linea de texto. Esa linea la almacenas en un objeto de la clase string. Por ejemplo:
| Código: | #include <fstream> using std::ifstream;
#include <iostream> using std::cout; using std::endl;
#include <string> using std::getline; using std::string;
// ...
ifstream entrada("Entrada.txt"); string linea;
// ...
getline(entrada, linea); cout << "Linea: \"" << linea << "\"" << endl;
// ...
entrada.close(); |
De la primera linea obtienes un entero que es el numero de filas y columnas de la matriz de pesos. Ese entero lo extraes de la linea mediante un objeto de la clase stringstream. Por ejemplo:
| Código: | #include <sstream> using std::stringstream;
// ...
getline(entrada, linea); stringstream ss; int filas; ss << linea << endl; ss >> filas; cout << "Numero de filas: " << filas << endl; |
Ya con el numero de filas declaras un vector (clase vector, no un array) para almacenar los nombres de las ciudades y lo rellenas de forma similar a la lectura del entero. Por ejemplo:
| Código: | vector<string> ciudad(filas); getline(entrada, linea); ss << linea << endl; for (int i = 0; i != filas; i++) ss >> ciudad[i];
for (int i = 0; i != filas; i++) cout << "ciudad[" << i << "] == " << ciudad[i] << endl; |
El proceso para leer cada uno de los números de la matriz es similar. Por ultimo si no tienes una guía de referencia sobre la biblioteca estándar de C++ puedes utilizar una en linea, por ejemplo C Plus Plus
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
|
| Volver arriba | |
 |
|
|