static void Main(string[] args) { //Atributo int[,] matriz3 = new int[3, 3]; //A continuación vamos a rellenar la matriz de 3x3 llamando a un método Console.WriteLine("Inserte los valores de una matriz de 3x3"); Console.WriteLine("Le recomiendo que los números sean enteros positivos"); Matriz.rellenaMatriz(matriz3); //Creamos las instancias Matriz mat10 = new Matriz(); //Matriz 10x10 Matriz mat3 = new Matriz(matriz3); //Matriz 3x3 //Las imprimimos por pantalla Console.WriteLine("Matriz Principal (10x10)"); mat10.mostrarMatriz(); Console.WriteLine("Submatriz/Matriz secundaria (3x3)"); mat3.mostrarMatriz(); //Llamamos al método que nos comprobará ambas matrices Matriz.compararMatrices(mat3, mat10); }
/// <summary> /// Usaremos un método para buscar una submatriz de 3x3(mat3) en la de 10x10(mat10) /// </summary> /// <param name="mat3">matriz de la instancia/objeto mat3</param> /// <param name="mat10">matriz de la instancia/objeto mat10</param> public static void compararMatrices(Matriz mat3, Matriz mat10) { //Atributos bool existeSubMatriz = false; int contador = 0; //Usaremos estas variables para obtener las posiciones de las matrices //Y así más adelante mostrar las coordenadas de las que coinciden int posicionInicial1 = -1, posicionInicial2 = -1, posicionFinal1 = -1, posicionFinal2 = -1; //Cogeremos como índice la posición[0,0] de mat3 //Con este índice de referencia buscaremos si hay alguna posición que coincida en mat10 for (int i = 0; i < mat10.getMatriz().GetLength(0); i++) { for (int j = 0; j < mat10.getMatriz().GetLength(1); j++) { //Comprobamos si coincide alguna coordenada if (mat3.getMatriz()[0, 0] == mat10.getMatriz()[i, j]) { //Cuando coinciden empezamos a recorrer ambas con las dimensiones de mat3 int m = i; for (int k = 0; k < mat3.getMatriz().GetLength(0); k++, m++) { //La variable 'n' obtendrá el valor de la variable 'j' //Esto hará que cada vez que vuelva a ejecutarse el bucle tenga el índice correcto int n = j; for (int l = 0; l < mat3.getMatriz().GetLength(1); l++, n++) { //Comparación para que no sobrepase las dimensiones de la matriz de 10x10 if (m < mat10.getMatriz().GetLength(0) && n < mat10.getMatriz().GetLength(1)) { //Comprobamos que coinciden if (mat3.getMatriz()[k, l] == mat10.getMatriz()[m, n]) { //Condición para obtener los índices de las posiciones iniciales if (contador == 0) { posicionInicial1 = m; posicionInicial2 = n; //Condición para obtener los índices de las posiciones finales } else if (contador == 8) { posicionFinal1 = m; posicionFinal2 = n; } contador++; } else { existeSubMatriz = false; } } else { //En el caso de encontrar un índice que se desborda, le damos a la variable 'l' el valor de la longitud de la columna //Así se sale del bucle 'for' l = mat3.getMatriz().GetLength(1); } } } } } } //La variable existeSubMatriz sólo sera 'true' si se han encontrado 9 posiciones que coincidan en esa misma submatriz if (contador == 9) { existeSubMatriz = true; } //Condicion de si existe if (existeSubMatriz) { Console.WriteLine("Existe esa Submatriz dentro de la matriz de 10x10"); Console.WriteLine("Las posiciones son:"); Console.WriteLine("Posicion inicial = [" + posicionInicial1 + "," + posicionInicial2 + "]"); Console.WriteLine("Posicion final = " + posicionFinal1 + "," + posicionFinal2 + "]"); } else { Console.WriteLine("No se ha encontrado ninguna Submatriz dentro de la Matriz"); } }