掃雷ゲームは非常に古典的な単機ゲームです.質問H:掃雷ゲーム


タイトルの説明は雷を掃くゲームは非常に古典的な単機の小さなゲームです.n行m列の雷区にはいくつかの格子が地雷(地雷格子と呼ばれる)を含み、他の格子は地雷(非地雷格子と呼ばれる)を含まない.プレイヤーが非地雷格を開くと、周囲の格子の中に地雷格が何個あるかを示す数字が表示されます.ゲームの目標は、地雷格子をひっくり返さない条件で、すべての非地雷格子を見つけることです.
n行m列の雷領域における地雷分布が与えられ,各非地雷格子の周囲の地雷格子数の計算が要求される.
注意:1つの格子の周囲の格子には、その上、下、左、右、左上、右上、左下、右下の8つの方向に直接隣接する格子が含まれています.入力第1行は、1つのスペースで区切られた2つの整数nおよびm(1≦n≦100、1≦m≦100)であり、それぞれ雷領域の行数および列数を表す.次にn行,各行m文字で,雷域における地雷分布を記述した.文字'*'は該当する格子が地雷格であることを示し、文字'?'該当する格子が非地雷格であることを示す.隣接する文字の間に区切り記号はありません.出力出力にはn行、各行m文字が含まれ、雷域全体を記述する.‘*’で地雷格を表し,周囲の地雷個数で非地雷格を表す.隣接する文字の間に区切り記号はありません.サンプル入力3*???サンプル出力*10 221*1ヒント
以前はよく掃雷をしていましたが、今は自分でその運行原理を書くことができます.附コード
#include 
#include 
#define N 103
void search(int i,int j);
char a[N][N];
int n,m;
int main()  {
    scanf("%d %d",&n,&m);
    getchar();
    for (int i=0;ifor (int j=0;jscanf("%c",&a[i][j]);
        getchar();
    }
    for (int i=0;ifor (int j=0;jif (a[i][j]=='*')
                printf("*"); 
            else
                search(i,j);
            if (j+1==m) printf("
"
); } } return 0; } void search(int i,int j) { int flag=0; for (int di=-1;di<2;di++) for (int dj=-1;dj<2;dj++) { int x=i+di; int y=j+dj; if ((di!=0||dj!=0)&&x>=0&&x=0&&yif (a[x][y]=='*') flag++; } printf("%d",flag); }