Dev - C++ - Ayuda con algoritmo de floyd warshall urgente!!

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con algoritmo de floyd warshall urgente!!

Publicado por Luis (5 intervenciones) el 22/02/2020 04:54:42
tengo este codigo la verdad no estoy seguro de si es correcto en su totalidad, soy algo nuevo en esto.

3 archivos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
*******************MatrizQ.cpp******************
 
 #include "MatrizQ.h"
 
 MatrizQ::MatrizQ(int tamanio)
 {
 this->tamanio=tamanio;
 this->matriz=NULL;
 matriz=new int*[tamanio];
 for(int i=0;i<tamanio;i++)
 {
 matriz[i]=new int[tamanio];
 }
 
 for(int i=0;i<this->tamanio;i++)
 {
 cout<<endl;
 for(int j=0;j<this->tamanio;j++)
 {
 matriz[i][j]=0;
 }
 }
 
 }
 
 MatrizQ::~MatrizQ()
 {
    liberaMemoria();
 }
 int MatrizQ::dameTuTamanio()
 {
 cin>>this->tamanio;
 return this->tamanio;
 }
 
 void MatrizQ::verificaTusDatos()
 {
 if(this->tamanio<0)
 {
 cout<<"el tamanio de la matriz no puede ser negativo, por favor ingresa otro valor: ";
 
 }
 }
 
 void MatrizQ::pideleAlUsuariosTusDatos()
 {
 if(matriz!=NULL)
 {
 for(int i=0;i<this->tamanio;i++)
 delete []matriz[i];
 delete []matriz;
 }
 
 cout<<endl<<"Dame el orden de la matriz A"<<endl<<"tamanio: ";
 
 do
 {
 this->dameTuTamanio();
 this->verificaTusDatos();
 
 }while(this->tamanio<0);
 
 
 /**RESERVA DE MEMORIA DINAMICA*/
 matriz=new int*[this->tamanio];
 for(int i=0;i<=this->tamanio;i++)
 {
 matriz[i]=new int[this->tamanio];
 }
 
 /**LECTURA DE LOS DATOS DE LA MATRIZ*/
 cout<<"ingresa los datos de la matriz"<<endl;
 for(int i=0;i<this->tamanio;i++)
 {
 for(int j=0;j<this->tamanio;j++)
 {
 cout<<"ingresa el dato en la posicion ["<<i+1<<"]["<<j+1<<"]:";
 cin>>matriz[i][j];
 }
 }
 }
 
 
 void MatrizQ::muestraTusDatos()
 {
 
 for(int i=0;i<this->tamanio;i++)
 {
 cout<<endl;
 for(int j=0;j<this->tamanio;j++)
 {
 cout<<"["<<matriz[i][j]<<"] ";
 }
 }
 cout<<endl;
 }
 
 int MatrizQ::dameTuDatoRC(int renglon, int columna)
 {
 renglon=renglon;
 columna=columna;
 
 if(renglon<0||columna<0)
 {
 cout<<"no hay renglones ni columnas negativas"<<endl;
 
 }
 
 return matriz[renglon][columna];
 }
 
 void MatrizQ::modificaTuDatoRC(int renglon, int columna, int valor)
 {
 renglon=renglon;
 columna=columna;
 this->matriz[renglon][columna]=valor;
 }
 
MatrizQ& MatrizQ::operator=(MatrizQ Q)
 {
 
    if(this!=&Q)
    {
        tamanio=Q.tamanio;
        delete [] this->matriz;
        this->tamanio=Q.tamanio;
 
        this->matriz = new int *[this->tamanio];
        for(int i=0; i<this->tamanio; i++)
        {
        this->matriz[i] = new int[tamanio];
        for(int j=0; j<this->tamanio; j++)
        this->matriz[i][j] = Q.matriz[i][j];
        }
 
    }
 
    else
        {
            matriz=NULL;
            for(int i=0; i<this->tamanio; i++)
                {
            for(int j=0; j<this->tamanio; j++)
            this->matriz[i][j] = Q.matriz[i][j];
        }
        }
 
 /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    for(int i=0;i<this->tamanio;i++)
    {
        for(int j=0;j<this->tamanio;j++)
 
        modificaTuDatoRC(i,j,Q.dameTuDatoRC(i,j));
    }
    return *this;
 
 }
 
 void MatrizQ::liberaMemoria()
 {
     if(matriz!=NULL)
 {
 for(int i=0;i<this->tamanio;i++)
 delete []matriz[i];
 delete []matriz;
 }
 }


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*****************MatrizQ.h**************
#ifndef MATRIZQ_H
#define MATRIZQ_H
#include<iostream>
using namespace std;
class MatrizQ
{
 public:
 MatrizQ(int tamanio = 0);
 ~MatrizQ();////////////////////////////////////////////////
 void pideleAlUsuariosTusDatos(void);
 void muestraTusDatos(void);
 int dameTuDatoRC(int renglon, int columna);
 int dameTuTamanio(void);
 void modificaTuDatoRC(int renglon, int columna, int valor);
 MatrizQ& operator=(MatrizQ Q);//////////////////////////////////
 friend void cam_min(MatrizQ **W, MatrizQ **Q0 );
 private:
 void verificaTusDatos(void);
 void liberaMemoria(void);////////////////////////////
 int** matriz;
 int tamanio;
};
#endif // MATRIZQ_H

en el main no tengo nada porque intente hacer el algoritmo de warshall pero no se como hacerlo o como empezar.


pregunte y solo me dijeron que es una funcion que no pertenece a la clase pero que si utiliza la clase, la verdad no entendí
y tengo que programar este código pero no se como hacerlo , intente con objetos dinamicos, y otras formas pero no se como hacerlo, si me pudieran orientar a como ejecutarlo y en donde se los agradeceria mucho, URGE tengo que entregar esto antes de las 12:00 am


*************** algoritmo a ejecutar

Algoritmo del camino mínimo
Un dígrafo con pesos G de M nodos está en memoria mediante una matriz de pesos W. Este
algoritmo encuentra la matriz Q tal que [I, J] es la longitud del camino mínimo del nodo VI al nodo
VJ. Infinito es un número muy grande y MIN es la función del valor mínimo.
1. [Iniciar Q]
Repetir Para I = 1, 2,…, M:
Repetir Para J = 1, 2,…, M:
Si W[I, J] = 0 entonces
Hacer Q[I, J] := Infinito
Sino
Hacer Q[I, J] := W[I, J]
[fin del bucle]
[fin del bucle]
2. [Actualizar Q:]
Repetir pasos 3 y 4 para K = 1,2,…, M:
3. Repetir paso 4 para I = 1,2,…, M:
4. Repetir para J = 1,2,…, M:
Hacer Q[I, J] := MIN( Q[I, J], Q[I, K] + Q[K , J])
[fin del bucle]
[fin del bucle]
[fin del bucle]
5. [Salir]




la matriz de pesos es ********************

[ 7 5 0 0 ]
[ 7 0 0 2 ]
[ 0 3 0 0 ]
[ 4 0 1 0 ]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con algoritmo de floyd warshall urgente!!

Publicado por Rodrigo (539 intervenciones) el 22/02/2020 19:02:58
Tienes que definir objetos que son del tipo de la clase que presentas, y usar los metodos que tienen para modificarlos y operar con ellos.
Aparentemente necesitas 2 objetos, Q y M.
Crealos, y luego haz los ciclos y pasos de tu algoritmo, y modifica Q de acuerdo a lo que dice el algoritmo usando los metodos que tienes para ello.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar