El primer problema es prácticamente igual al que vimos en clase. El único problema es la lectura de la entrada (porque tiene espacios enmedio). El problema es que std::cin >> c; donde c es un char se salta los espacios (y nosotros los necesitamos, pues representan los lugares por donde sí podemos caminar). Entonces hay dos formas de leer la entrada: leyendo líneas completas (pero hay que cuidar quitar los saltos de línea que queden pendientes de la línea anterior) o con scanf y getchar (teniendo cuidado de quitar manualmente los saltos de línea). Abajo muestro código que implementa ambas formas de leer el tablero: -------------------------------------------------------- int n, m; std::cin >> n >> m; std::string tablero[n]; for (int i = 0; i < n; ++i) { std::cin >> std::ws; // saltarse primero los espacios en blanco que hayan quedado pendientes (por ejemplo, los saltos de línea) std::getline(std::cin, tablero[i]); // leer una línea completa } -------------------------------------------------------- int n, m; std::cin >> n >> m; std::getchar( ); // saltarse el salto de línea después de los enteros char tablero[n][m]; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { std::scanf("%c", &tablero[i][j]); // podrían sustituir este ciclo por alguna otra forma que lea una línea completa de chars al estilo C; incluso podrían usar fread de m chars } std::getchar( ); // saltarse el salto de línea después de la línea }