ParaDigrafos existe un procedimiento para encontrar lamatriz de accesibilidad, podemos determinar la matriz de accesibilidad a través de una serie de pasos. La matriz de accesibilidad nos brinda información sobre si el digrafo es F.C (fuertemente conexo) o no, es decir si para cada par de vértices u,v:u es accesible desdev yv es accesible desdeu.
Al observar la matriz sí notamos que hay al menos un elemento igual a cero diremos que el digrafo no es F.C conexo. De lo contrario, si es F.C.
La matriz de accesibilidad de un Digrafo es:Acc(D) = bin[In+ M+ M^2+ M^3+ ...+ M^n-1]M es la matriz de conexión del digrafo, determinaremos M^2, M^3 hasta M^n-1donde n es el número de vértices del digrafo.
Luego de determinar las matrices antes mencionadas las sumaremos junto a la matriz identidad y ese resultado procederemos a binarizarlo (Los elementos mayores que 1 los haremos igual a 1, los elementos que sean igual a 0 seguirán siendo igual a 0).
Ejercicio de ejemplo:Dada la matriz de conexión del siguiente digrafo, determinar su matriz de accesibilidad.M=
M^2 = MxM
M^3 = M^2 * M
M^4 = M^3 * M
I5 =
Acc(D) = bin[In+ M+ M^2+ M^3+ ...+ M^n-1]
Acc(D) =
De esta manera podemos obtener la matriz de accesibilidad del digrafo. Este digrafo no es fuertemente conexo, debido a que su matriz de accesibilidad posee componentes nulas.
EnC++ Estos pasos para determinar sí el digrafo es F.C o no, los podemos realizar de la siguiente manera:
#include iostreamusing namespace std;int main(){ int vertices; cout "Ingrese la cantidad de vertices del digrafo:" endl; cin vertices; int matrizC[vertices][vertices]; int matrizaux[vertices][vertices]; int matrizM[vertices][vertices]; int matrizAcc[vertices][vertices]; //Cargamos la matriz de conexion cout "Ingrese los elementos de la matriz de conexion: " endl; for(int i = 0; i vertices; i++){ for(int j = 0; j vertices; j++){ cout "Ingrese la entrada a" i j endl; cin matrizC[i][j]; } } for(int i = 0; i vertices; i++){ for(int j = 0; j vertices; j++){ matrizaux[i][j] = matrizC[i][j]; matrizAcc[i][j] = matrizC[i][j]; } } //ciclo int cont = vertices-2; while(cont){ // Producto para M... for(int i=0;ivertices;i++){ for(int j=0;jvertices;j++){ matrizM[i][j]=0; for(int k=0;kvertices;k++){ matrizM[i][j]=matrizM[i][j]+(matrizC[i][k]*matrizaux[k][j]); } } } //Sumamos para la matriz de accesibilidad for(int i = 0; i vertices; i++){ for(int j = 0; j vertices; j++){ matrizAcc[i][j] += matrizM[i][j]; matrizaux[i][j] = matrizM[i][j]; } } cont--; }//Fin del ciclo //Sumar matriz de indentidad y binarizar for(int i = 0; i vertices; i++){ for(int j = 0; j vertices; j++){ if(i == j) matrizAcc[i][j] = 1; if(matrizAcc[i][j] 1) matrizAcc[i][j] = 1; } } //Imprimimos la matriz de accesibilidad cout "Matriz de accesibilidad:" endl; for(int i = 0; i vertices; i++){ for(int j = 0; j vertices; j++){ cout matrizAcc[i][j] " "; } cout endl; } return 0;}
Inicialmente ingresamos el numero de vértices del digrafo, las matrices con las que vamos a trabajar son de orden nxn donde n es el numero de vértices del digrafo.
El ciclo while se repetirá mientras la variable cont sea distinta de 0 (n - 2 veces debido a que M^2 se calcula fuera del ciclo while), esta variable irá decreciendo de uno en uno en cada repetición del ciclo.
Mientras vamos realizando la multiplicación de las matrices vamos sumando los resultados en la matriz de accesibilidad.
Al final, luego de salir del ciclo sumamos la matriz identidad y binarizamos la matriz de accesibilidad.
Ejecución:Ingrese la cantidad de vertices del digrafo:5Ingrese los elementos de la matriz de conexion:Ingrese la entrada a000Ingrese la entrada a011Ingrese la entrada a020Ingrese la entrada a030Ingrese la entrada a040Ingrese la entrada a101Ingrese la entrada a110Ingrese la entrada a121Ingrese la entrada a130Ingrese la entrada a141Ingrese la entrada a200Ingrese la entrada a210Ingrese la entrada a220Ingrese la entrada a230Ingrese la entrada a240Ingrese la entrada a300Ingrese la entrada a311Ingrese la entrada a320Ingrese la entrada a330Ingrese la entrada a340Ingrese la entrada a400Ingrese la entrada a411Ingrese la entrada a421Ingrese la entrada a431Ingrese la entrada a440Matriz de accesibilidad:1 1 1 1 11 1 1 1 10 0 1 0 01 1 1 1 11 1 1 1 1Descarga del proyecto en C++:https://mega.co.nz/#!ZBETVRqK!eVh_8o...También te podría interesar:Algoritmo para calcular la matriz de la relación predecesor inmediato a partir de la matriz de la relación de orden en c++.4 Ejercicios Básicos de Programación Orientada a Objetos en c++eBook - Como programar en c++ DeitelDe sistema decimal a sistema binario en c++ y Java3 libros sobre programacion orientada a objetos
No hay comentarios:
Publicar un comentario