#include <iostream>
#include <vector>
void cargarMatrizEnEspiral(std::vector<std::vector<int>>& matriz, int n, int m) {
int inicioFila = 0, finFila = n - 1;
int inicioColumna = 0, finColumna = m - 1;
int indice = 0;
while (inicioFila <= finFila && inicioColumna <= finColumna) {
// Llenar de izquierda a derecha
for (int i = inicioColumna; i <= finColumna; i++) {
matriz[inicioFila][i] = indice++;
}
inicioFila++;
// Llenar de arriba hacia abajo
for (int i = inicioFila; i <= finFila; i++) {
matriz[i][finColumna] = indice++;
}
finColumna--;
// Llenar de derecha a izquierda
if (inicioFila <= finFila) {
for (int i = finColumna; i >= inicioColumna; i--) {
matriz[finFila][i] = indice++;
}
finFila--;
}
// Llenar de abajo hacia arriba
if (inicioColumna <= finColumna) {
for (int i = finFila; i >= inicioFila; i--) {
matriz[i][inicioColumna] = indice++;
}
inicioColumna++;
}
}
}
void imprimirMatriz(const std::vector<std::vector<int>>& matriz) {
for (const auto& fila : matriz) {
for (int valor : fila) {
std::cout << valor << "\t";
}
std::cout << std::endl;
}
}
int main() {
int n, m;
std::cout << "Ingrese el número de filas: ";
std::cin >> n;
std::cout << "Ingrese el número de columnas: ";
std::cin >> m;
std::vector<std::vector<int>> matriz(n, std::vector<int>(m));
std::cout << "Ingrese los elementos de la matriz:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
std::cout << "Elemento [" << i << "][" << j << "]: ";
std::cin >> matriz[i][j];
}
}
std::vector<std::vector<int>> matrizEspiral(n, std::vector<int>(m));
cargarMatrizEnEspiral(matrizEspiral, n, m);
std::cout << "Matriz en espiral:\n";
imprimirMatriz(matrizEspiral);
return 0;
}