Las matrices poco densas son aquellas en las que la mayoría de los elementos son cero. Es decir, hay pocas entradas no nulas en la matriz en comparación con el número total de entradas. Las matrices poco densas son comunes en aplicaciones en las que se representan grafos o redes, ya que muchos grafos tienen un número mucho mayor de vértices que de aristas.
Las matrices estáticas son aquellas que no cambian después de su creación. Es decir, una vez que se ha definido una matriz estática, no se pueden agregar ni eliminar entradas de ella. En cambio, las matrices dinámicas son aquellas que pueden cambiar durante la ejecución de un programa, agregando o eliminando entradas.
Para matrices poco densas estáticas, una forma eficiente de representarlas es mediante una matriz de adyacencia, en la que cada entrada representa una arista en el grafo. Esto permite un acceso rápido a cualquier entrada de la matriz mediante índices y es adecuado para grafos de tamaño mediano o pequeño. Sin embargo, para grafos muy grandes o con muchas aristas, puede ser más eficiente utilizar otras estructuras de datos, como listas de adyacencia.
A continuacion el codigo para c++:
- #include <iostream>
- using namespace std;
- const int MAX_V = 100; // Número máximo de vértices
- // Estructura para almacenar una matriz de adyacencia
- struct MatrizAdyacencia {
- int V; // Número de vértices
- int E; // Número de aristas
- int matriz[MAX_V][MAX_V]; // Matriz de adyacencia
- // Constructor para inicializar la matriz
- MatrizAdyacencia(int V) {
- this->V = V;
- this->E = 0;
- for (int i = 0; i < V; i++) {
- for (int j = 0; j < V; j++) {
- matriz[i][j] = 0;
- }
- }
- }
- // Método para agregar una arista entre los vértices u y v con peso w
- void agregarArista(int u, int v, int w) {
- matriz[u][v] = w;
- E++;
- }
- // Método para obtener el peso de la arista entre los vértices u y v
- int obtenerPesoArista(int u, int v) {
- return matriz[u][v];
- }
- // Método para verificar si hay una arista entre los vértices u y v
- bool hayArista(int u, int v) {
- return matriz[u][v] != 0;
- }
- // Método para eliminar la arista entre los vértices u y v
- void eliminarArista(int u, int v) {
- matriz[u][v] = 0;
- E--;
- }
- // Método para obtener el grado de un vértice (es decir, el número de aristas que tienen
- un vértice como extremo)
- int obtenerGradoVertice(int v) {
- int grado = 0;
- for (int i = 0; i < V; i++) {
- if (matriz[v][i] != 0) grado++;
- if (matriz[i][v] != 0) grado++;
- }
- return grado;
- }
- };
- int main() {
- // Crear una matriz de adyacencia 4x4 para representar un grafo con 4 vértices
- MatrizAdyacencia matriz(4);
- // Agregar algunas aristas
- matriz.agregarArista(0, 1, 10);
- matriz.agregarArista(1, 2, 20);
Link de apoyo