Lenguaje Luogu C++ | P2670 Juego Buscaminas

¡Aprende C++ desde pequeño! Registre las preguntas formuladas durante el proceso de preparación de exámenes y aprendizaje de Luogu C ++, y registre cada momento.

Adjunto una publicación resumida: Lenguaje C ++ de Luogu | Resumen_El blog de un comunicador que ama la programación-blog CSDN


[Descripción del Título]

Buscaminas es un juego independiente muy clásico. En  el campo minado con n  filas y  m  columnas, algunas cuadrículas contienen minas (llamadas cuadrículas de minas) y otras cuadrículas no contienen minas (llamadas cuadrículas no mineras). Cuando un jugador voltea una cuadrícula que no es tierra, aparecerá un número en esa cuadrícula, que indica cuántas de las cuadrículas circundantes son cuadrículas de minas. El objetivo del juego es encontrar todas las fichas que no sean de tierra sin descubrir ninguna ficha de tierra.

Ahora bien, dada  la distribución de minas en un campo minado con n  filas  ym  columnas, es necesario calcular el número de cuadrículas minadas alrededor de cada cuadrícula no minera.

Nota: Las cuadrículas circundantes de una cuadrícula incluyen cuadrículas directamente adyacentes a ella en ocho direcciones: superior, inferior, izquierda, derecha, superior izquierda, superior derecha, inferior izquierda e inferior derecha.

【ingresar】

La primera línea son dos números enteros n  y  m separados por un espacio  , que indican el número de filas y columnas del campo minado respectivamente.

Las siguientes  n  líneas, cada línea  de m  caracteres, describen la distribución de las minas en el campo minado. El carácter * indica que la cuadrícula correspondiente es una cuadrícula terrestre y el carácter ? indica que la cuadrícula correspondiente es una cuadrícula no terrestre. No hay separadores entre personajes adyacentes.

【Producción】

El archivo de salida contiene  n  líneas, cada línea tiene  m  caracteres, que describen todo el campo minado. Utilice * para representar minas y utilice el número de minas circundantes para representar no minas. No hay separadores entre personajes adyacentes.

【Muestra de entrada】

3 3
*??
???
?*?

【Muestra de salida】

*10
221
1*1

[Explicación detallada del código]

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, m, dx[8]={-1,-1,-1,0,0,1,1,1}, dy[8]={-1,0,1,-1,1,-1,0,1};
    char a[105][105] = {0};
    cin >> n >> m;
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            cin >> a[i][j];
        }
    }
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            if (a[i][j]=='*') {
                cout << "*";
                continue;
            }
            int counts = 0, x = i, y = j;
            for (int k=0; k<8; k++) {
                if (a[x+dx[k]][y+dy[k]]=='*') counts++;
            }
            cout << counts;
        }
        cout << endl;
    }
    return 0;
}

【resultado de la operación】

3 3
*??
???
?*?
*10
221
1*1

Supongo que te gusta

Origin blog.csdn.net/guolianggsta/article/details/132870865
Recomendado
Clasificación